Algoritmo DNI valido

7,899 views
Skip to first unread message

gonz...@gmail.com

unread,
Aug 30, 2013, 5:23:29 PM8/30/13
to wordpre...@googlegroups.com
Gente!

Es de España pero lo he aplicado a DNI's peruanos (3 DNI's para ser exactos) y me ha salido bien.

Quería saber si uds han tenido experiencia en esto, justo ahora me interesa validar DNI's..

En resumen:

42262648<2
donde 42262648 es el DNI y 2 es el dígito de control

Para validar si es DNI valido se multiplica por el juego 7,3,1 y luego se suma todo, es decir:
4   2   2   6   2   6   4   8
7   3   1   7   3   1   7   3
28+6+2+42+6+6+28+24=142

El dígito de control el el último dígito de la suma, es decir 2

Saludos

José Antonio planas

unread,
Aug 30, 2013, 5:56:35 PM8/30/13
to wordpre...@googlegroups.com
Q interesante, probare llegando a casa
--
Has recibido este mensaje porque estás suscrito al grupo "Wordpress Peru" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a wordpress-per...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.


--
José Antonio Planas
Cel: +511 947 469350

Alexander Gonzales

unread,
Aug 30, 2013, 6:05:05 PM8/30/13
to wordpre...@googlegroups.com
Hey ya probé con 9 dni's y funciona !

Suficiente pa mi, lo voy a implementar...
Haber si alguien se hace el plugin pa el repositorio =p


Saludos


2013/8/30 José Antonio planas <plana...@gmail.com>

José Antonio planas

unread,
Aug 30, 2013, 7:42:50 PM8/30/13
to wordpre...@googlegroups.com
Maestro

siento decirloq ue no funciono con el mio

parece que los dnis mas anticuhcos como el mio que empiezan con 0 no funciona su tecnica



José Antonio Planas
Cel: +511 947 469350


2013/8/30 Alexander Gonzales <alex...@gonzalesc.org>

Alexander Gonzales

unread,
Aug 30, 2013, 7:50:38 PM8/30/13
to wordpre...@googlegroups.com
Pucha..
HOy probé con el DNI de una abuela de 79 años y me funcionó, empezaba con cero tb..
Please, dame tus 9 digitos..

Recuerda que te hablo del DNI que esta debajo de tu foto... toda esa tira pasa

Javier Albarracin

unread,
Aug 30, 2013, 9:27:23 PM8/30/13
to wordpre...@googlegroups.com

En los DNI viejitos el algoritmo es DNI / 200 = mesa de votacion

--

Alexander Gonzales

unread,
Aug 30, 2013, 10:27:38 PM8/30/13
to wordpre...@googlegroups.com
Gente!

llegaron a probar de nuevo?
Mira aqui un DNI de una señora : (debajo de la foto está el numero)

I<PER06896559<4

Donde sus 8 dígitos son : 06896559 y si dígito de control es 4

Entonces: 0*7+6*3+8*1+9*7+6*3+5*1+5*7+9*3 = 174 entonces su último dígito es 4 ... Funcionó!
y este DNI empieza con 0

Díganme si les ha funcionado please...

Saludos



2013/8/30 Javier Albarracin <jalba...@gmail.com>

José Antonio planas

unread,
Aug 31, 2013, 10:45:42 AM8/31/13
to wordpre...@googlegroups.com
Alex

vovi hace rla pruba poer no funca, no voy adrate el dni por este medio por medias de seguridad, uno nunca sabe a quien le llegan estos.

pero empieza con 0, la suma es 168 y mi digito de control es 4



José Antonio Planas
Cel: +511 947 469350


2013/8/30 Alexander Gonzales <alex...@gonzalesc.org>
Gente!

Braulio Aquino García

unread,
Aug 31, 2013, 10:47:29 AM8/31/13
to wordpre...@googlegroups.com

José Planas es un rebelde del sistema

Javier Albarracin

unread,
Aug 31, 2013, 12:23:31 PM8/31/13
to wordpre...@googlegroups.com
Con mi DNI y el de Mi esposa funka.. ambos comienzan con 0...

Jose, conozco tu DNI y efectivamente no funciona..
PEEroOOO --> En la lectura habla de una letras.. tu DNI debe tener una "I" (letra "i")
esa "i" es el 8 y entonces tu 168 sí cumple: chequea el articulo:

C
ÁLCULO DE LOS DÍGITOS DE CONTROL

Los dígitos de control se generan a partir de otros campos a los cuales se les aplica un algoritmo sencillo. Primero se ha de separar por caracteres, por ejemplo, si el valor del campo es12345678Z:

1 2 3 4 5 6 7 8 Z

Si alguno de los caracteres es una letra, se ha de cambiar por su valor numérico:

A 0   F 5   K 10   P 15   U 20   Z 25
B 1   G 6   L 11   Q 16   V 21
C 2   H 7   M 12   R 17   W 22
D 3   I 8   N 13   S 18   X 23
E 4   J 9   O 14   T 19   Y 24


2013/8/31 José Antonio planas <plana...@gmail.com>

Javier Albarracin

unread,
Aug 31, 2013, 12:24:52 PM8/31/13
to wordpre...@googlegroups.com
Comparto con ustedes esto que es muy útil y muchos dicen que "no existe": https://cel.reniec.gob.pe/valreg/valreg.do


2013/8/31 Javier Albarracin <jalba...@gmail.com>

Javier Albarracin

unread,
Aug 31, 2013, 12:52:36 PM8/31/13
to wordpre...@googlegroups.com
Otra que se me ocurre es que en algunos casos el dígito verificador considera las P E R (las tres letras antes del DNI) dentro de la formula
esas tres letras P = 15   E = 4   R = 17   suman 36

si al 168 de Jose Planas le sumamos ese 36 nos da 204 y ahi sí funciona el 4, su dígito verificador.


2013/8/31 Javier Albarracin <jalba...@gmail.com>

Javier Albarracin

unread,
Aug 31, 2013, 1:02:33 PM8/31/13
to wordpre...@googlegroups.com
Jose la última: Una cosa es el digito verificador que sale Arriba a la derecha (en mi caso dice mi DNI y un guion - 1)

Otro numero diferente es el numero que sale abajo (en mi caso el 7):

I<PERXXXXXXXX<7<<<<<<<<<<<<<<<

Estás usando ese de abajo?


2013/8/31 Javier Albarracin <jalba...@gmail.com>

gonz...@gmail.com

unread,
Aug 31, 2013, 1:04:27 PM8/31/13
to wordpre...@googlegroups.com

Eh me olvidé decirle lo de las letras, es q ningun dni x aqui habian letras...

Si a Jose Planas le salió sería el difinitivo para aplicarlo a un algoritmo.... confirmanos Planas..

Saludos

gonz...@gmail.com

unread,
Aug 31, 2013, 3:03:30 PM8/31/13
to wordpre...@googlegroups.com
Gente!! gente!!! encontré otro algoritmo, al principio no lo entendía xq no tenía la base del calculo dígito x dígito, pero ahora si, según el post no sólo valida DNI peruano sino tb RUC.

y esta vez! genera el dígito noveno, ese que esta después del guión en toda una esquina !!

En resumen (sólo pa DNI):
Esta vez la tira que multiplica es de derecha a izquierda => 3,2,7,6,5,4,3,2

Paso1:
DNI : 06896559-0
Tomamos los 8 dígitos y multiplicamos de derecha a izquierda..
=9*2+5*3+5*4+6*5+9*6+8*7+6*2+0*3 = 205 (el DNI es el que esta en negrita)

Paso2:
Luego le restamos 11 al resto de la división entre 11
$variable => 11 - (205%11) = 4

Paso3:
Si el resultado es 11, $variable cambia a 0, si es 10, $variable cambia a 1, para otros casos se mantiene. En este caso se mantiene.

Paso4:
Entonces, ese 4 que nos ha dado, es un indice de un array fijo, el array es el sgte: { '6', '7', '8', '9', '0', '1', '1', '2', '3', '4', '5' }
Como cualquier array que se respeta, se empieza desde cero, entonces el indice 4 vendría a ser "0" y funcionó!!

Para los que tienen una letra al final en vez de un número tb hay un array : { 'K', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }

Yeah!
Lo he probado con 6 DNI's y funciona!!

Si pueden probarlo con su DNI, sería genial, sino pasenme (interno) su DNI y yo lo compruebo. 
Saludos

gonz...@gmail.com

unread,
Aug 31, 2013, 5:45:30 PM8/31/13
to wordpre...@googlegroups.com
Sólo para informar que lo he probado con 45 DNI's y funciona !!
Sólo una cosa, el paso3 no lo consideren, luego todo bien!

Saludos

KnxDT

unread,
Dec 15, 2013, 3:38:54 PM12/15/13
to wordpre...@googlegroups.com
Excelente aporte.

Saludos.
Saludos.

Percy Salazar del R.

Alexander Gonzales

unread,
Dec 15, 2013, 5:35:15 PM12/15/13
to wordpre...@googlegroups.com

Arturo Paredes P

unread,
Jan 30, 2015, 3:18:58 PM1/30/15
to wordpre...@googlegroups.com

TENGO UNA DUDA COMO SE ORIGINA EXACTAMENTE  EL Dígito de verificación general de la segunda línea. (siempre al extremo derecho). DE UN DNI DEL PERU 
POR AFVOR MOSTARME DETALLADAMENTE MUCHAS GRACIAS DNI :43381907

Javier Albarracin

unread,
Jan 31, 2015, 1:01:51 PM1/31/15
to wordpre...@googlegroups.com
Hola Arturo,

Comparto con el grupo un "excel" que hice y me funciona bien (ahí puedes ver como usar el array -que NO es el que se indica en el post de portella, eso es para españa- )

Probando con el DNI que enviaste: 43381907 el dígito de verificación sale 7

Adjunto excel y puedes leer el artículo aquí que tiene además un codigo fuente listo para usar: https://thefrontend.wordpress.com/2012/11/21/como-validar-el-dni-de-peru/

Saludos,

Javier   (GRUPO perdonen el off-topic pero es un hilo interesante y del cual nadie se ha quejado)


--
Has recibido este mensaje porque estás suscrito al grupo "Wordpress Peru" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a wordpress-per...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

EXCEL_DNI.xls

Alexander Gonzales

unread,
Jan 31, 2015, 2:01:49 PM1/31/15
to wordpre...@googlegroups.com

Arturo Paredes P

unread,
Feb 2, 2015, 10:52:15 PM2/2/15
to wordpre...@googlegroups.com
javier buenas noches pero quisiera saber como se origina exactamente el codigo de verificacion de la parte inferior el que esta en la segunda linea  a la mano derecha  el que conmunmente dices que es homonimo pero es la concatenacion de primera linea (numero dni) y segunda linea (fecha nacimmiento y fecha de caducidad) pero el detallado de como sale el cuarto codigo de verificacion el q esta a lado  derecho por favor pido su comprension y ayuda gracias 

inka jhon

unread,
Apr 27, 2016, 10:15:35 AM4/27/16
to Wordpress Peru
Hola,
Aquí tengo un algoritmo en C++, el ejecutable para Linux también, funciona con todos los DNI y es muy rápido. Cualquier aporte será apreciado.
https://github.com/inkacoder/pirhua/blob/master/dni.cpp

Saludos,
Inka Jhon

Ingrid Ladino

unread,
May 18, 2016, 1:05:11 PM5/18/16
to Wordpress Peru
HOLA ME INTERESA EL EXCEL.. DEBO VERIFICAR MUCHOS DNI... ME AYUDAS!

gonz...@gmail.com

unread,
May 18, 2016, 2:25:29 PM5/18/16
to wordpre...@googlegroups.com
Pero deberías tener los 9 dígitos de cada DNI (no 8).

luz6...@gmail.com

unread,
Dec 4, 2017, 5:56:27 PM12/4/17
to Wordpress Peru


El sábado, 31 de enero de 2015, 13:01:51 (UTC-5), Jalbarracin escribió:
SOY DE PERU Y MI  NUMERO DE DNI ES EL 74206808 cual seria el codigo de verificacion 
 porfavorrrr
Reply all
Reply to author
Forward
0 new messages