Algoritmo para generar el CPF

Algoritmo para generar el CPF

En Brasil, cada persona tiene un número de registro CPF (Cadastro de Pessoas Físicas) único y definitivo, que la identifica ante la Hacienda Pública. Este número de registro se compone de 9 dígitos, agrupados de 3 en 3. Por ejemplo, 313.402.809-30.

El CPF se valida utilizando los dígitos de verificación, que son los 2 últimos dígitos del CPF, es decir, a partir de los 2 últimos dígitos del CPF se sabe si los 9 dígitos anteriores son válidos.

 

Algoritmo de generación del CPF:

 

  • Cálculo del primer dígito de control:

Tomemos un vector [latex] a E R^9 [/latex] cuyos componentes son los dígitos que forman el número CPF en el orden dado. Para el CPF citado como ejemplo al principio de este artículo, 313.402.809-30, tenemos el vector:

[latex] a = (3, 1, 3, 4, 0, 2, 8, 0, 9) [/latex]

Determinamos el producto escalar de este vector con el vector (estándar)

[latex] b = (10, 9, 8, 7, 6, 5, 4, 3, 2) [/latex]

es decir,

[latex] a . b = (3, 1, 3, 4, 0, 2, 8, 0, 9) . (10, 9, 8, 7, 6, 5, 4, 3, 2) = 30 + 9 + 24 + 28 + 0 + 10 + 32 + 0 + 18 = 151 [/latex]

A continuación, tomamos el resto de la división entera de este producto escalar por 11. Si el resto de esta división entera es 0 ó 1, entonces el primer dígito de control es 0. En caso contrario (resto entre 2 y 10), el primer dígito de control es 11 – resto.

Para el ejemplo en cuestión, dividir 151 entre 11 da como resultado un cociente de 13 y un resto de 8. Así que el primer dígito de control es [latex] 11 – 8 = 3 . [/latex]

 

  • Cálculo del segundo dígito de control:

Tomemos un vector [latex] c E R^10 [/latex] cuyas nueve primeras componentes son los dígitos que componen el número CPF en el orden dado, y la última componente es el primer dígito de control encontrado. Para el ejemplo en cuestión tenemos:

[latex] c = (3, 1, 3, 4, 0, 2, 8, 0, 9, 3) [/latex]

Determinamos el producto escalar de este vector con el vector (estándar)

[latex] d = (11, 10, 9, 8, 7, 6, 5, 4, 3, 2) , [/latex]

es decir,

[latex] c . d = (3, 1, 3, 4, 0, 2, 8, 0, 9, 3) . (11, 10, 9, 8, 7, 6, 5, 4, 3, 2) = 33 + 10 + 27 + 32 + 0 + 12 + 40 + 0 + 27 + 6 = 187 [/latex]

A continuación, tomamos el resto de la división entera de este producto escalar por 11. Si el resto de esta división entera es 0 ó 1, entonces el segundo dígito de control es 0. En caso contrario (resto entre 2 y 10), el segundo dígito de control viene dado por 11 – resto.

Para el ejemplo en cuestión, dividir 187 entre 11 da como resultado un cociente de 17 y un resto de 0. Por lo tanto, el segundo dígito de control es 0.

 

Bibliografía: Geometría Analítica – Fabiano José dos Santos y Silvimar Fábio Ferreira.

 

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *