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:
A cópia do código é a seguinte:
/**
* 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 ', masculino
*/
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;
}
// 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, "");
}
Versão Atualizada 2
A cópia do código é a seguinte:
função checkIdCard (num)
{
num = num.ToupPercase ();
// O número de identificação é de 15 ou 18 dígitos.
if (! (/(^/d {15} $) | (^/d {17} ([0-9] | x) $)/. test (num)))))
{
// alert ('O comprimento do número de identificação inserido está incorreto, ou o número não atende aos requisitos!
retornar falso;
}
// O bit de verificação é gerado de acordo com as disposições da ISO 7064: 1983.Mod 11-2, e X pode ser considerado como o número 10.
// O seguinte analisa a data de nascimento e dígitos de verificação, respectivamente
var len, re;
len = num.length;
if (len == 15)
{
re = novo regexp (/^(/d {6}) (/d {2}) (/d {2}) (/d {2}) (/d {2}) (/d {3}) $ /);
var ArrSplit = num.match (re);
// Verifique se a data de aniversário está correta
var dtmbirth = new Date ('19 ' + arrsplit [2] +'/' + arrsplit [3] +'/' + arrsplit [4]);
Var Bgoodday;
bgoodday = (dtmbirth.getyear () == número (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == Número (Arrsplit [3])) && (dtmbirth.getdate () == N UMBER (arrsplit [4]));
If (! BGOODDAY)
{
// alert ('A data de nascimento no número de identificação inserida está incorreta!');
retornar falso;
}
outro
{
// Converter cartão de identificação de 15 dígitos em 18 dígitos
// O bit de verificação é gerado de acordo com as disposições da ISO 7064: 1983.Mod 11-2, e X pode ser considerado como o número 10.
var Arnin = nova matriz (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var Arrch = new Array ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2') ;
var ntemp = 0, i;
num = num.substr (0, 6) + '19' + num.substr (6, num.length - 6);
para (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
NUM += ARRCH [NTEMP % 11];
retornar true;
}
}
if (len == 18)
{
re = novo regexp (/^(/d {6}) (/d {4}) (/d {2}) (/d {2}) (/d {3}) ([0-9] | x ) $/);
var ArrSplit = num.match (re);
// Verifique se a data de aniversário está correta
var dtmbirth = nova data (arrsplit [2] + "/" + arrsplit [3] + "/" + arrsplit [4]);
Var Bgoodday;
BGOODDAY = (dtmbirth.getlyear () == Número (Arrsplit [2])) && ((dtmbirth.getMonth () + 1) == número (Arrsplit [3])) && (dtmbirth.getdate () == Número (número ((número (número ( Arrsplit [4]));
If (! BGOODDAY)
{
// alert (dtmbirth.getyear ());
// alerta (arrsplit [2]);
// alert ('A data de nascimento no número de identificação inserida está incorreta!');
retornar falso;
}
outro
{
// Verifique se o código de verificação do cartão de identificação de 18 dígitos está correto.
// O bit de verificação é gerado de acordo com as disposições da ISO 7064: 1983.Mod 11-2, e X pode ser considerado como o número 10.
var valnum;
var Arnin = nova matriz (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var Arrch = new Array ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2') ;
var ntemp = 0, i;
para (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
valnum = arrch [ntemp % 11];
if (valnum! = num.substr (17, 1))
{
// alert ('O código de verificação do cartão de identificação de 18 bits está incorreto! Deve ser:' + valnum);
retornar falso;
}
retornar true;
}
}
retornar falso;
}