javascript Validador DNI,CIF y NIE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Validador DNI,CIF y NIE相关的知识,希望对你有一定的参考价值。

const DNI_REGEX = /^(\d{8})([A-Z])$/;
const CIF_REGEX = /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/;
const NIE_REGEX = /^[XYZ]\d{7,8}[A-Z]$/;

function validateDocumentID(str) {
    str = str.toUpperCase().replace(/\s/, '');
    let valid = false;
    const type = this.documentType(str);

    switch (type) {
        case 'dni': valid = this.validDNI(str); break;
        case 'nie': valid = this.validNIE(str); break;
        case 'cif': valid = this.validCIF(str); break;
        default: break;
    }

    return { type, valid };
}

function documentType(str) {
    if (str.match(this.DNI_REGEX)) {
        return 'dni';
    }
    if (str.match(this.CIF_REGEX)) {
        return 'cif';
    }
    if (str.match(this.NIE_REGEX)) {
        return 'nie';
    }
}

function validDNI(dni) {
    const dni_letters = 'TRWAGMYFPDXBNJZSQVHLCKE';
    const letter = dni_letters.charAt(parseInt(dni, 10) % 23);

    return letter === dni.charAt(8);
}

function validNIE(nie) {
    let niePrefix = nie.charAt(0);
    switch (niePrefix) {
        case 'X': niePrefix = 0; break;
        case 'Y': niePrefix = 1; break;
        case 'Z': niePrefix = 2; break;
        default: break;
    }

    return this.validDNI(niePrefix + nie.substr(1));
}

function validCIF(cif) {
    const match = cif.match(this.CIF_REGEX);
    const letter = match[1];
    const number = match[2];
    const control = match[3];
    let even_sum = 0;
    let odd_sum = 0;
    let n;

    for (let i = 0; i < number.length; i++) {
        n = parseInt(number[i], 10);
        if (i % 2 === 0) {
            n *= 2;
            odd_sum += n < 10 ? n : n - 9;
        } else {
            even_sum += n;
        }
    }

    const control_digit = (10 - (even_sum + odd_sum)).toString().substr(-1);
    const control_letter = 'JABCDEFGHI'.substr(Number(control_digit), 1);

    if (letter.match(/[ABEH]/)) {
        return control === control_digit;
    } else if (letter.match(/[KPQS]/)) {
        return control === control_letter;
    } else { return control === control_digit || control === control_letter; }

}

以上是关于javascript Validador DNI,CIF y NIE的主要内容,如果未能解决你的问题,请参考以下文章

javascript rut chileno validador y mascara

JavaScript 有效的Nif,Cif,Dni

javascript 智利DNI验证器并获取JSON {run:Number / String,adv:Number / String,dv:Number / String,valid:Boolean

ActionScript 3 Validador

python Validar DNI,NIF,NIE

从AbstractUser继承的模型不会哈希密码字段