Algoritimo de validação de CPF brasileiro –; Registro Individual
En este artículo explicaré paso a paso en la transformación de un algoritmo para verificar la validez de un CPF a código en PHP.
Si ya conoces el algoritmo y quieres ir directamente a los códigos disponibles, Haga clic aquí.
Pero, ¿qué es el CPF??
CPF es el acrónimo de Registro Individual. Es una serie de documentos brasileños actualmente administrados y emitidos por el Servicio de Impuestos Internos. Todo brasileño tiene derecho a (o deber) Para tener uno y solo con él es posible tener acceso a servicios bancarios, Inscribirse en cursos públicos de pregrado, Asumir el cargo a través de licitación pública, tienen tarjeta de crédito, entre otros ejemplos.
Composición de la ACB
La ACB está compuesta por: once dígitos, y el Últimos tres dígitos tienen significados que explicaremos a continuación.
El noveno dígito, Lectura de izquierda a derecha, indica el Región Fiscal dónde se expidió. Hay diez regiones para los dígitos de cero a nueve, como se muestra en la tabla siguiente..
1 –Df, Ir, Sra., MT y TO
2 –Corriente alterna, AM, Ap, Papá, RO y RR
3 –EC, MA y PI
4 –AL, Pb, Pei, Rn
5 - BA y SE
6 –Mg
7 - ES y RJ
8 –Sp
9 - PR y SC
0 - RS
Los primeros ocho dígitos son el número base.
Los dos últimos dígitos son los dígitos de pago.
Estos dígitos se generan a partir de cálculos de los primeros nueve dígitos de acuerdo con las siguientes reglas::
Comprobador de primer dígito
Para el primer dígito, Tomamos el 8 primeros dígitos y multiplicar cada uno de ellos por un número iniciado en 10 y la medida en que estamos avanzando hacia la derecha, disminuimos en 1 este multiplicador y sumamos todos los resultados.
Para una mejor comprensión, Tomar 123.456.789-XY como ejemplo de CPF para tener el dígito XY intencionado.
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
Agregar 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 Have 210.
Ahora, Con el total obtenido tenemos dos formas de llegar al verificador de dígitos.
Método 1
Multiplicar 210 por 10, Dividimos por 11 y nos llevamos el resto.
Entonces tenemos: 210 x 10 = 2.100
2.100 / 11 = 190 con descanso 10.
Si el resto es 10 El dígito de control es cero, de lo contrario, El resto es el dígito del verificador.
En nuestro caso, como el resto es igual a 10 El primer dígito será 0 (cero).
Método 2
Obtenemos el resto de la 210 por 11.
Entonces tenemos: 210 / 11 es igual a 19 con descanso 1.
Aquí tenemos una regla para cuando el resto es 0 (cero) o 1 (Uno). Cuando esto sucede, el dígito de control es cero, de lo contrario restamos el resto de 11 Para obtener el dígito del verificador.
Para nuestro caso, como tenemos descanso 1, Nuestro primer verificador de dígitos será 0 (cero).
Comprobador de segundos dígitos
Para obtener el comprobador de segundos dígitos, Agregamos el primer verificador de dígitos al 9 dígitos iniciales y volvemos a hacer el mismo proceso hecho para el primer dígito, con la diferencia de que ahora partimos del segundo dígito.
Nuestro CPF ya tiene el valor 123.456.789-0X y las operaciones necesarias están a continuación.
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
Agregar 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 Have 244.
Ahora, Con el total obtenido debemos utilizar una de las dos formas ya explicadas para llegar al dígito de control.
Método 1
Multiplicar 244 por 10, Dividimos por 11 y nos llevamos el resto.
Entonces tenemos: 244 x 10 = 2.440
2.440 / 11 = 221 con descanso 9.
Si el resto es 10 El dígito de control es cero, de lo contrario, El resto es el dígito verificador y en nuestro caso tenemos 9 como verificador de segundos dígitos.
Método 2
Obtenemos el resto de la 244 por 11.
Entonces tenemos: 244 / 11 es igual a 22 con descanso 2.
Recordando que tenemos una regla para cuando el resto es 0 (cero) o 1 (Uno) El dígito de control es cero.
Si es mayor que 1 Resta este valor de 11 Para obtener el dígito del verificador.
Para nuestro caso, Have 11 –; 2 = 9 como nuestro verificador de segundos dígitos que es el mismo valor obtenido en el método 1.
CPF tiene un límite para emitir?
Teóricamente, podemos tener hasta 10^8 o 100.000.000 (Cien millones) Combinaciones posibles para cada región. En la práctica tenemos un poco menos debido al no uso de dígitos repetidos, por ejemplo. Aunque parece un número bastante grande, Debería ser renovado en algún momento, ya que no se puede reutilizar incluso cuando una persona muere.
Suponiendo que ya existan en la región 8 (estancia en São Paulo) aproximadamente 40 millones de CPF emitidos (No pude obtener datos confiables en 2022 Así que estoy usando un número aproximado de la población residente que es de 44,5 millones de personas), quedaría aproximadamente 60 millones de CPF disponibles. Con la tasa de crecimiento actual de los CPF (año de 2022) en aproximadamente 600 mil al año, El sistema debe mantenerse justo por debajo de 100 años.
Venimos aquí al final de la explicación y el ejemplo sobre la composición de la ACB. Nuestra muestra CPF fue 123.456.789-09. A continuación tenemos algunos ejemplos de códigos tanto para generar los dígitos de checkout, cuánto validarlos.
Códigos
Versión PHP.
Versión JavaScript.
2 Respuestas
[…;] el menor número de complejidad ciclomática que pude lograr basado en la explicación presente en el artículo Algoritmo de validación de la FPC brasileña - Registro de Individuos. Tiene un ligero cambio en el momento del cálculo del segundo probador digitalizado. En lugar de […;]
[…;] número de líneas de complejidad ciclomática que logré con base en la explicación presente en el artículo Algoritmo de validación de la FPC brasileña - Registro de Individuos. Tiene un ligero cambio en el momento del cálculo del segundo probador digitalizado. En lugar de […;]