Algoritmo para generar el CPF

shape
shape
shape
shape
shape
shape
shape
shape

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.

 

Deja una respuesta

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