A seguir, o código de verificação de validade usando JS de acordo com as regras de codificação do número de identificação.
O código IDCARD-Validate.js é o seguinte:
Copie o código do código da seguinte forma:
/**
* Regras de codificação de 15 bits para cartão de identificação: dddddd yymmdd xx p
* dddddd: código regional
* yymmdd: data de nascimento
* xx: a codificação de classe seqüencial, não pode ser determinada
* P: Gênero, números ímpares são homens, números pares são femininos
* <p />
* Regras de codificação de 18 bits para cartão de identificação: dddddd yyyymmdd xxx y
* dddddd: código regional
* yyyyymmdd: data de nascimento
* xxx: codificação do tipo de sequência, não pode ser determinada, números ímpares são homens, pares são fêmeas
* y: Verifique o código, o valor deste dígito pode ser obtido nos primeiros 17 dígitos
* <p />
* O fator de ponderação do número de 18 dígitos é (direita para esquerda) Wi = [7, 9, 10, 5, 8, 4, 2, 1, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Bit de verificação y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Fórmula de cálculo para bit de verificação: y_p = mod (∑ (ai × wi), 11)
* I é o 2 ... 18 dígitos do número de identificação da direita para a esquerda;
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 4, 2, 1]; // fator de ponderação
var validecode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // o valor do bit de verificação do cartão de identificação.10 representa x
function iDCardValidate (IDCARD) {
iDCard = Trim (Idcard.replace ( / / g, "" "));
if (idcard.length == 15) {
return isvalitybrithby15idcard (idcard);
} else if (idcard.length == 18) {
var a_idcard = idcard.split (""); // Obtenha a matriz de cartão de identificação
if (isValityBrithby18idcard (IDCARD) && isTRUEVALIDACODEBY18IDCARD (A_IDCARD)) {
retornar true;
} Outro {
retornar falso;
}
} outro {
retornar falso;
}
}
/**
* Determine se o último bit de verificação está correto quando o número de identificação é de 18 dígitos
* @param a_idcard Id Number Array
* @retornar
*/
função isTrueValidateCodeBy18IdCard (a_idcard) {
var sum = 0;
if (a_idcard [17] .tolowerCase () == 'x') {
a_idcard [17] = 10; // Substitua o código de verificação pelo último bit x por 10 para operações subsequentes
}
for (var i = 0; i <17; i ++) {
soma += wi [i] * a_idcard [i]; // soma ponderada
}
valcodeposição = soma % 11; // onde obter o código de verificação
if (a_idcard [17] == Validecode [ValCodePosition]) {
retornar true;
} outro {
retornar falso;
}
}
/**
*Julgar se é um homem ou uma mulher através do cartão de identificação
* @param Idcard 15/18 Digits Número de ID
* @return 'feminino'-female'-Male
*/
Função MaleorFemalByidCard (IDCARD) {
iDCard = Trim (Idcard.replace (// g, "" ")); // Processe o número de identificação. Incluindo espaços entre os caracteres.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
retornar 'feminino';
}outro{
retornar 'masculino';
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
retornar 'feminino';
}outro{
retornar 'masculino';
}
}outro{
Retornar nulo;
}
// Os caracteres recebidos podem ser processados diretamente como uma matriz
// if (idcard.length == 15) {
// alerta (Idcard [13]);
// if (idcard [13]%2 == 0) {
// retorna 'feminino';
// }outro{
// retorna 'masculino';
//}
//} else if (idcard.length == 18) {
// alerta (Idcard [16]);
// if (idcard [16]%2 == 0) {
// retorna 'feminino';
// }outro{
// retorna 'masculino';
//}
// }outro{
// retorna nulo;
//}
}
/**
* Verifique se o aniversário no número de identificação de 18 dígitos é um aniversário válido
* @param idcard
* @retornar
*/
função isValityBrithby18idCard (IDCARD18) {
var ano = idcard18.substring (6,10);
var mês = idcard18.substring (10,12);
var dia = idcard18.substring (12,14);
var temp_date = nova data (ano, parsefloat (mês) -1, parsefloat (dia));
// Use GetlyEar () aqui para obter o ano para evitar o problema dos insetos do milênio
if (temp_date.getlyear ()! = parsefloat (ano)
|| temp_date.getmonth ()! = parsefloat (mês) -1
|| temp_date.getdate ()! = parsefloat (dia)) {
retornar falso;
}outro{
retornar true;
}
}
/**
* Verifique se o aniversário no número de identificação de 15 dígitos é um aniversário válido
* @param idcard15 string de identificação de livro de 15 bits
* @retornar
*/
função isValityBrithby15idCard (IDCARD15) {
var ano = idcard15.Substring (6,8);
var mês = idcard15.Substring (8,10);
var dia = idcard15.Substring (10,12);
var temp_date = nova data (ano, parsefloat (mês) -1, parsefloat (dia));
// Para a sua idade no seu antigo cartão de identificação, você não precisa considerar o problema do Worm Millennium e usar o método getyear ()
if (temp_date.getyear ()! = parsefloat (ano)
|| temp_date.getmonth ()! = parsefloat (mês) -1
|| temp_date.getdate ()! = parsefloat (dia)) {
retornar falso;
}outro{
retornar true;
}
}
// Remova os espaços da cabeça e da cauda
Função Trim (str) {
return str.place (/(^/s*) | (/s*$)/g, "");
}
Para o código acima, no uso real do gênero, você pode primeiro determinar se o cartão de identificação é válido. Esse tipo de julgamento não é feito neste exemplo de código e parece um pouco inútil e pode ser totalmente enriquecido de acordo com a situação em uso real.