En esta oportunidad te muestro el código para validar números de DNI o NIE españoles con JavaScript.

El código

const validateVat = (value) => {
	let number, dni, letter;
	let expresion_regular_dni = /^[XYZ]?\d{5,8}[A-Z]$/;
	value = value.toUpperCase();
	if (expresion_regular_dni.test(value) === true) {
		number = value.substr(0, value.length - 1);
		number = number.replace('X', 0);
		number = number.replace('Y', 1);
		number = number.replace('Z', 2);
		dni = value.substr(value.length - 1, 1);
		number = number % 23;
		letter = 'TRWAGMYFPDXBNJZSQVHLCKET';
		letter = letter.substring(number, number + 1);
		if (letter != dni) {
			console.log('Wrong ID, the letter of the NIF does not correspond');
			return false;
		} else {
			console.log('Correct ID');
			return true;
		}
	} else {
		console.log('Wrong ID, invalid format');
		return false;
	}
}

Cómo funciona

  1. Comprueba con una expresión regular que el valor tenga el formato de un DNI o NIE: una letra opcional (X, Y o Z), entre 5 y 8 dígitos y una letra final.
  2. En los NIE sustituye la letra inicial por su número equivalente (X = 0, Y = 1, Z = 2).
  3. Calcula el resto de dividir el número entre 23 y obtiene la letra de control correspondiente.
  4. Compara esa letra con la que se ha introducido.

Es un script bastante simple pero eficiente. Puedes verlo también en el repositorio de GitHub.