Ниже приведен код проверки достоверности с использованием JS в соответствии с правилами кодирования идентификатора.
Код idcard-validate.js выглядит следующим образом:
Код кода копирования следующим образом:
/**
* 15-битные правила кодирования для удостоверения личности: Dddddd yymmdd xx p
* DDDDDD: региональный код
* yymmdd: дата рождения
* xx: кодирование последовательного класса, не может быть определена
* P: Пол, нечетные числа - мужские, четные цифры - женские
* <p />
* 18-битный кодирование правил для удостоверения личности: dddddd yyyymmdd xxx y
* DDDDDD: региональный код
* yyyymmdd: дата рождения
* xxx: кодирование типа последовательности, нельзя определить, нечетные числа являются мужчинами, даже числа - женщины
* y: проверьте код, значение этой цифры может быть получено через первые 17 цифр
* <p />
* Весовой коэффициент 18-значного числа составляет (справа слева) WI = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Бит проверки y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Формула расчета для проверки бита: y_p = mod (∑ (ai × wi), 11)
* I - 2 ... 18 цифр идентификационного номера справа налево;
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1, 1]; // весовой коэффициент
var validecode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // Значение бита проверки идентификационной карты.10 представляет x
функция idcardvalidate (idcard) {
idcard = trim (idcard.replace ( / / g, ""));
if (idcard.length == 15) {
вернуть isvalitybrithby15idcard (idcard);
} else if (idcard.length == 18) {
var a_idcard = idcard.split (""); // Получить массив идентификационных карт
if (isvalitybrithby18idcard (idcard) && istruevalidateCodeby18idcard (a_idcard)) {
вернуть истину;
} Еще {
вернуть ложь;
}
} еще {
вернуть ложь;
}
}
/**
* Определите, является ли последнее бит проверки правильным, когда идентификационный номер составляет 18 цифр.
* @param a_idcard идентификационные номера массив
* @возвращаться
*/
Функция iStrueValidateCodeby18idcard (a_idcard) {
var sum = 0;
if (a_idcard [17] .tolowercase () == 'x') {
A_IDCARD [17] = 10; // Заменить код проверки на последний бит x на 10 для последующих операций
}
для (var i = 0; i <17; i ++) {
sum += wi [i] * a_idcard [i]; // взвешенная сумма
}
valcodeposition = sum % 11; // где получить код проверки
if (a_idcard [17] == validecode [valcodeposition]) {
вернуть истину;
} еще {
вернуть ложь;
}
}
/**
*Судите, является ли это мужчиной или женщиной через удостоверение личности
* @param idcard 15/18-значный идентификационный номер
* @return 'Женщина-фемейль-мужская
*/
Функция maleorfemalbyidcard (idcard) {
idcard = trim (idcard.replace (// g, "")); // обработать идентификационный номер. В том числе пробелы между персонажами.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
вернуть «женщину»;
}еще{
вернуть «мужчина»;
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
вернуть «женщину»;
}еще{
вернуть «мужчина»;
}
}еще{
Вернуть ноль;
}
// входящие символы могут быть обработаны непосредственно как массив
// if (idcard.length == 15) {
// предупреждение (idcard [13]);
// if (idcard [13]%2 == 0) {
// вернуть «женщину»;
// }еще{
// вернуть «мужчина»;
//}
//} else if (idcard.length == 18) {
// предупреждение (idcard [16]);
// if (idcard [16]%2 == 0) {
// вернуть «женщину»;
// }еще{
// вернуть «мужчина»;
//}
// }еще{
// вернуть NULL;
//}
}
/**
* Убедитесь, является ли день рождения на 18-значном идентификационном номере действительным днем рождения
* @param idcard 18-битная идентификационная строка книги
* @возвращаться
*/
функция isValitybrithby18idcard (idcard18) {
var Year = idcard18.substring (6,10);
var month = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = новая дата (год, parsefloat (месяц) -1, parsefloat (день));
// Использовать electielear () здесь, чтобы получить год, чтобы избежать проблемы тысячелетий.
if (temp_date.getfyear ()! = parsefloat (год)
|| temp_date.getmonth ()! = parsefloat (месяц) -1
|| temp_date.getDate ()! = parsefloat (day)) {
вернуть ложь;
}еще{
вернуть истину;
}
}
/**
* Убедитесь, является ли день рождения на 15-значном идентификационном номере действительным днем рождения
* @param idcard15 15-битная строка идентификатора книги
* @возвращаться
*/
функция isValitybrithby15idcard (idcard15) {
var Year = idcard15.substring (6,8);
var month = idcard15.substring (8,10);
var day = idcard15.substring (10,12);
var temp_date = новая дата (год, parsefloat (месяц) -1, parsefloat (день));
// Для вашего возраста в вашем старом удостоверении личности вам не нужно рассматривать проблему червя тысячелетия и использовать метод getyear ()
if (temp_date.getyear ()! = parsefloat (год)
|| temp_date.getmonth ()! = parsefloat (месяц) -1
|| temp_date.getDate ()! = parsefloat (day)) {
вернуть ложь;
}еще{
вернуть истину;
}
}
// Удалить струнную головку и хвостовые пространства
функция Trim (str) {
return str.replace (/(^/s*) | (/s*$)/g, "");
}
Для приведенного выше кода в фактическом использовании пола вы можете сначала определить, является ли идентификационная карта действительной. Этот вид суждения не вынесен в этом примере кода, и оно кажется немного бесполезным и может быть полностью обогащено в соответствии с ситуацией в реальном использовании.