@singuerinc

2014-08-06

Validar DNI/NIE/NIF de España

javascript, validation, spain, dni, nie, nif, regex

Update! Si bien este código funciona, te recomiendo utilizar mi nueva librería "Better DNI" que he publicado en Github. Puedes probarla aquí: https://better-dni.netlify.com/

Validamos un DNI español con Javascript, puede validar tanto NIF como NIE.

function validate(value) {
  var validChars = 'TRWAGMYFPDXBNJZSQVHLCKET';
  var nifRexp = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;
  var nieRexp = /^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;
  var str = value.toString().toUpperCase();

  if (!nifRexp.test(str) && !nieRexp.test(str)) return false;

  var nie = str
    .replace(/^[X]/, '0')
    .replace(/^[Y]/, '1')
    .replace(/^[Z]/, '2');

  var letter = str.substr(-1);
  var charIndex = parseInt(nie.substr(0, 8)) % 23;

  if (validChars.charAt(charIndex) === letter) return true;

  return false;
}

validate('12345678Z'); //true - "nif"
validate('X9464187D'); //true - "nie"

Demo