Меньше чепухи, просто поместите код напрямую, анализ в комментариях очень ясен, поэтому здесь нет BB.
Кода -копия выглядит следующим образом:
/*
В соответствии с положениями о числах идентичности гражданства в национальном стандарте GB 11643-1999 Народной Республики Китайская Республика, номер идентификации гражданства является характерным комбинированным кодом, состоящим из семнадцатизначного цифрового онтологического кода и однозначного кодекса проверки. Заказ о договоренности находится слева направо: шестизначный адресный код, восьмизначная дата кода рождения, код трехзначных последовательности и однозначный код проверки.
Кодекс адреса представляет собой Кодекс административного отделения округа (город, баннер и округ), где находится постоянное место жительства кодированного объекта.
Дата рождения кодекса представляет собой год, месяц и день рождения закодированного объекта, а год представлен четырьмя цифрами, и нет разделения между годом, месяцем и днем.
Код последовательности представляет номер последовательности, назначенный лицам, родившимся в том же году, месяце и дня в районе, идентифицированной тем же кодом адреса. Нечетные номера кодов заказа назначены мужчинам, и даже числа назначаются женщинам.
Код проверки является кодом проверки, рассчитанным на основе первых семнадцатизначных кодов, и в соответствии с кодом проверки ISO 7064: 1983. MOD 11-2.
Расчет метод даты рождения.
Код идентификационной карты «Бит» впервые расширяет год рождения до 4 бит, просто добавив 19 или 18, что включает всех людей, родившихся между 1800 и 1999 годами;
Те, кто родился после Нового года, должно быть 18, и такого беспокойства нет. Что касается тех, кто родился 1800 лет назад, в то время не должно быть идентификационного номера, ⊙⊙B Хан ...
Ниже приведено регулярное выражение:
Дата рождения 1800-2099 (18 | 19 | 20)?/D {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])
Идентификационная карта Регулярное выражение/^/d {6} (18 | 19 | 20)?/D {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])/d {3} (/d | x) $/i
Правила проверки битов 6-значный код адреса + 6-значная дата рождения + 3-значный номер последовательности
Правила проверки битов 6-битный код адреса + 8-битный дата рождения + 3-разрядный номер последовательности + 1-битный бит проверки
Формула правила цифры проверки: ∑ (ai × wi) (мод 11) ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………………………………………………………………………………….
В формуле (1):
I ----- Указывает номер последовательности чисел номера символа слева, включая код проверки;
AI ---- представляет число символов в позиции I-TH;
WI ----- показывает весовой коэффициент в позиции I-TH, и его значение рассчитывается на основе формулы Wi = 2^(n-1) (мод 11).
I 18 17 16 15 14 13 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 7 9 10 5 8 4 2 1
*/
// Проверка законности идентификационного номера
// поддержка 15-значных и 18-значных идентификационных номеров
// Поддержка адреса Адреса, дата рождения и проверка чековых цифр
Функция IdentityCodevalid (code) {
var City = {11: «Пекин», 12: «Tianjin», 13: «Hebei», 14: «Shanxi», 15: «Inner Монголия ", 21:" liaoning ", 22:" Jilin ", 23:" Heilongjiang ", 31:" Shanghai ", 32:" Цзянсу ", 33: «Чжэцзян», 34: «Аньхой», 35: «Фуцзянь», 36: «Цзянси», 37: «Шандун», 41: «Хенань», 42: «Хубей», 43: «Хунань», 44: «Гуандун», 45: «Гуанси», 46: «Хейнан», 50: «Чунцин», 51: «СИЧУАН», 52: «Гуйчжоу», 53: «Юнь NAN ", 54:" Тибет ", 61:« Шэньси », 62:« Гансу », 63:« Цинхай », 64:« Нинсия », 65:« Синьцзян », 71:« Тайван », 81:« Хонг Конг ", 82:" Макао ", 91:" иностранный "};
var tip = "";
var pass = true;
if (! code ||!/^/d {6} (18 | 19 | 20)?/d {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])/d {3} (/d | $/i.test (code)) {
TIP = "Ошибка формата идентификационной карты";
pass = false;
}
else if (! city [code.substr (0,2)]) {
tip = "ошибка кодирования адреса";
pass = false;
}
еще{
// 18-значная идентификационная карта должна быть проверена для последнего контрольного бита
if (code.length == 18) {
code = code.split ('');
// ∑ (ai × wi) (мод 11)
// весовой коэффициент
VAR -фактор = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 4, 2];
// калибровочный бит
var parity = [1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2];
var sum = 0;
var ai = 0;
var wi = 0;
для (var i = 0; i <17; i ++)
{
ai = code [i];
wi = фактор [i];
sum += ai * wi;
}
var last = паритет [sum % 11];
if (parity [sum % 11]! = code [17]) {
tip = "Проверьте ошибку бита";
pass = false;
}
}
}
if (! Pass) оповещение (TIP);
вернуть проход;
}
var c = '130981199312253466';
var res = eDementCodevalid (c);
Как насчет этого? Это очень полный код проверки первого идентификатора. Это не то же самое измерение, что и другие коды проверки, которые искали в Интернете. Пожалуйста, заберите это, если вам это нужно.