-
-
Save lgaticaq/2e5de70146e34afe0968eed49bc533ad to your computer and use it in GitHub Desktop.
| /** | |
| * Verifica que un DNI de Perú sea valido | |
| * @param {String} data DNI | |
| * @returns {Boolean} | |
| */ | |
| const validate = data => { | |
| const dni = data.replace('-', '').trim().toUpperCase() | |
| if (!dni || dni.length < 9) return false | |
| const multiples = [3, 2, 7, 6, 5, 4, 3, 2] | |
| const dcontrols = { | |
| numbers: [6, 7, 8, 9, 0, 1, 1, 2, 3, 4, 5], | |
| letters: ['K', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] | |
| } | |
| const numdni = dni.substring(0, dni.length - 1).split('') | |
| const dcontrol = dni.substring(dni.length - 1) | |
| const dsum = numdni.reduce((acc, digit, index) => { | |
| acc += digit * multiples[index] | |
| return acc | |
| }, 0) | |
| const key = 11 - (dsum % 11) | |
| const index = (key === 11) ? 0 : key | |
| if (/^\d+$/.test(dni)) { | |
| return dcontrols.numbers[index] === parseInt(dcontrol, 10) | |
| } | |
| return dcontrols.letters[index] === dcontrol | |
| } |
Gracias @ChoqueCastroLD 👍
Hola, gracias por el codigo de ejemplo. ¿tenes o conoces algun generador de DNI validos para Peru? Gracias, saludos.
Hola. No he usado ni conozco el generador que necesitas.
Con este numero de dni --> arroja no valido ... 71390300-2
Hay alguna documentacion por parte de la RENIEC y/o ONPE que indique el algoritmo .
@fericell2909 no recuerdo de donde obtuve ese algoritmo, debí anotar la fuente 😞. Pero buscando encontré esto, no se si te sirva https://mag.elcomercio.pe/respuestas/cual-es-el-digito-verificador-de-mi-dni-documento-nacional-de-identidad-reniec-peru-nnda-nnlt-noticia/
Con este numero de dni --> arroja no valido ... 71390300-2 Hay alguna documentacion por parte de la RENIEC y/o ONPE que indique el algoritmo .
El algoritmo es válido. Seguro es un error en tu código. He copiado, pegado y buscado el dni que has escrito.
{"dni":"71390300","nombres":"CARLOS FRANCO","apellidoPaterno":"TAIPE","apellidoMaterno":"SALVATIERRA","codVerifica":"6"}
El resultado de la operación es 11. Lo que significa que es el índice 0.
const index = (key === 11) ? 0 : key
Saludos
Cambiar el segundo dni de la linea 7 por data