Aquí dejo el código que he utilizado para poner la letra al DNI/NIF/NIE en un campo habilitado para ello en Cuentas y contactos.
function letradni(){
$("#docidentidad_c").attr("onBlur","digitocontrol();");
}
function preparar_numero(){
var digitos = document.getElementById("docidentidad_c").value;
var dni = primer_digito(digitos)[1] + digitos.substring(1);
return dni;
}
function digitocontrol(){
var digitos = preparar_numero();
var numero = parseInt(digitos);
var resto = numero % 23;
var letra = ['T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'];
document.getElementById('docidentidad_c').value = dni(numero.toString()) + letra[resto];
}
function dni(valor){
var tipo_identidad = document.getElementById('cif_c').value;
var digitos = document.getElementById("docidentidad_c").value;
var dig1 = primer_digito(digitos);
dig1 = dig1[0];
switch(tipo_identidad) {
case 'NIE':
if (dig1 != 'X' && dig1 != 'Y' && dig1 != 'Z') {
alert('NIE Incorrecto. Corríjalo');
} else {
digitos = dig1 + '0'.repeat(7-valor.toString().length) + valor;
}
break;
case 'NIF':
var digitos = "0".repeat(8-valor.toString().length) + valor;
break;
case 'DNI':
var digitos = "0".repeat(8-valor.toString().length) + valor;
break;
default:
var digitos = dig1 + valor;
}
return digitos;
}
function primer_digito(digitos){
switch(digitos.charAt(0)) {
case 'X':
dig1=['X', '0'];
break;
case 'Y':
dig1=['Y', '1'];
break;
case 'Z':
dig1=['Z', '2'];
break;
default:
dig1=[digitos.charAt(0), digitos.charAt(0)];
}
return dig1;
}