Algoritimo de validação de CPF brasileiro –; Inscription individuelle
Dans cet article je vais vous expliquer pas à pas comment transformer un algorithme pour vérifier la validité d’un CPF en code en PHP.
Si vous connaissez déjà l’algorithme et que vous souhaitez accéder directement aux codes disponibles, Cliquez ici.
Mais qu’est-ce que le CPF ??
CPF est l’acronyme de Individual Taxpayer Registration (Enregistrement des Contribuables Individuels). Il s’agit d’un numéro de document brésilien actuellement géré et délivré par le Service fédéral des impôts. Chaque Brésilien a le droit (ou l’obligation) d’en avoir un et seulement avec elle qu’il est possible d’avoir accès aux services bancaires, S’inscrire à des cours publics de premier cycle, prendre ses fonctions par le biais d’un appel d’offres public, Avoir une carte de crédit, entre autres exemples.
Composition du CPF
Le CPF est composé de : Onze chiffres, et l' les trois derniers chiffres Ils ont des significations que nous expliquerons ci-dessous.
Le neuvième chiffre, Lecture de gauche à droite, indique l’attribut Région fiscale l’endroit où il a été délivré ;. Il y a dix régions pour les chiffres de zéro à neuf, comme indiqué dans le tableau ci-dessous.
1 –DF, ALLER, MS, MT et TO
2 –Courant alternatif, SUIS, AP, PAPA, RO et RR
3 –CE, MA et PI
4 –AL, PB, PE, RN
5 – BA et SE
6 –MG
7 – ES et RJ
8 –SP
9 – PR et SC
0 – Les RS
Les huit premiers chiffres sont le numéro de base.
Les deux derniers chiffres sont les chiffres de contrôle.
Ces chiffres sont générés à partir des calculs des neuf premiers chiffres selon les règles suivantes:
Premier chiffre de contrôle
Pour le premier chiffre, Nous prenons l’exemple de la 8 premiers chiffres et multipliez chacun d’eux par un nombre commençant par 10 Et à mesure que nous nous déplaçons vers la droite, Nous avons diminué de 1 ce multiplicateur et additionnez tous les résultats.
Pour une meilleure compréhension, Prendre 123.456.789-XY à titre d’exemple de CPF ayant le chiffre XY délibéré.
1 x 10 = 10
2 x 9 = 18
3 x 8 = 24
4 x 7 = 28
5 x 6 = 30
6 x 5 = 30
7 x 4 = 28
8 x 3 = 24
9 x 2 = 18
Additionnant 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 Avoir 210.
Maintenant, Avec le total obtenu, nous avons deux façons d’arriver au chiffre de contrôle.
Méthode 1
Multiplier 210 par 10, Nous divisons par 11 Et nous avons pris le reste.
Nous avons alors: 210 x 10 = 2.100
2.100 / 11 = 190 avec repos 10.
Si le reste est 10 Le chiffre de contrôle est zéro, Sinon, le reste est le chiffre de contrôle.
Dans notre cas, comme le reste est égal à 10 Le premier chiffre sera 0 (zéro).
Méthode 2
Nous obtenons le reste de la 210 par 11.
Nous avons alors: 210 / 11 est égal à 19 avec repos 1.
Voici une règle pour quand le reste est 0 (zéro) ou 1 (Un). Lorsque cela se produit, le chiffre de contrôle est zéro, sinon, nous soustrayons le reste de 11 pour obtenir le chiffre de contrôle.
Pour notre cas, Comme nous avons du repos 1, Notre premier chiffre de contrôle sera 0 (zéro).
Vérificateur de deuxième chiffre
Pour obtenir le deuxième chiffre de contrôle, Ajoutez le premier chiffre de contrôle à l’attribut 9 chiffres initiaux et nous refaisons le même processus que pour le premier chiffre, à la différence que maintenant nous partons du deuxième chiffre.
Notre CPF a déjà la valeur 123.456.789-0X et les opérations requises sont ci-dessous.
2 x 10 = 20
3 x 9 = 27
4 x 8 = 32
5 x 7 = 35
6 x 6 = 36
7 x 5 = 35
8 x 4 = 32
9 x 3 = 27
0 x 2 = 0
Additionnant 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 Avoir 244.
Maintenant, Avec le total obtenu, nous devons utiliser l’une des deux méthodes déjà expliquées pour arriver au chiffre de contrôle.
Méthode 1
Multiplier 244 par 10, Nous divisons par 11 Et nous avons pris le reste.
Nous avons alors: 244 x 10 = 2.440
2.440 / 11 = 221 avec repos 9.
Si le reste est 10 Le chiffre de contrôle est zéro, Sinon, le reste est le chiffre de contrôle et dans notre cas, nous avons 9 comme contrôle à deux chiffres.
Méthode 2
Nous obtenons le reste de la 244 par 11.
Nous avons alors: 244 / 11 est égal à 22 avec repos 2.
N’oublions pas que nous avons une règle pour le reste 0 (zéro) ou 1 (Un) Le chiffre de contrôle est zéro.
S’il est supérieur à 1 Nous soustrayons cette valeur de 11 pour obtenir le chiffre de contrôle.
Pour notre cas, Avoir 11 –; 2 = 9 comme notre deuxième chiffre de contrôle qui est la même valeur obtenue dans le 1.
Le CPF a une limite d’émission?
En théorie, on peut avoir jusqu’à 10^8 ou 100.000.000 (cent millions) de combinaisons possibles pour chaque région. Dans la pratique, nous en avons un peu moins en raison de la non-utilisation de chiffres répétés, par exemple. Bien que cela semble être un nombre assez élevé, Il devra être rénové à un moment donné, puisqu’il ne peut pas être réutilisé même après le décès d’une personne.
En supposant qu’ils existent déjà dans la région 8 (État de São Paulo) environ 40 millions de CPF émis (Je n’ai pas pu obtenir de données fiables 2022 J’utilise donc un nombre approximatif de la population résidente, qui est 44,5 millions de personnes), resterait à peu près 60 millions de CPF disponibles. Avec le taux de croissance actuel des CPF (Année de 2022) À propos 600 milliers par an, Le système devrait tenir jusqu’à un peu moins de 100 années.
Nous arrivons ici à la fin de l’explication et de l’exemple sur la composition du CPF. Notre exemple de CPF était le suivant : 123.456.789-09. Ci-dessous, nous avons quelques exemples des deux codes pour générer les chiffres de contrôle, combien les valider.
Codes
Version PHP.
Version JavaScript.
2 Réponses
[…;] le plus faible nombre de complexité cyclomatique que j’ai pu obtenir sur la base de l’explication de l’article Algorithme de validation CPF brésilien – Enregistrement des contribuables individuels. Il y a un léger changement dans le moment du calcul du deuxième vérificateur numérisé. Au lieu de […;]
[…;] nombre de lignes de complexité cyclomatique que j’ai obtenues sur la base de l’explication de l’article Algorithme de validation CPF brésilien – Enregistrement des contribuables individuels. Il y a un léger changement dans le moment du calcul du deuxième vérificateur numérisé. Au lieu de […;]