Ранее я делал валидаторы ввода для проверки шаблонов электронной почты, минимальной и максимальной длины пароля, подтверждения пароля и т. Д.
Теперь у меня есть что-то новое, что я застрял и не могузнать, с чего начать.
Мой ввод должен состоять из 13 чисел, и он должен проверить, содержат ли вставленные 13 чисел действительный или недействительный идентификатор гражданства на основе алгоритма (математического результата), опубликованного ниже.
Идентификатор гражданства состоит из 13 цифр и имеет следующий формат:
DDMMGGGRRSSSK
DDMMGGG представляет день, месяц и год рождения в следующем примере:
1010990, представляющий 10 октябряof 1990.
RR представляет регион гражданина и может включать числа между:
00 до 99
SSS представляет числа для пола для мужчин, это должно быть число ниже 499 идля женщин выше 500.
Теперь последний номер, который является 13-м номером, является специальным контрольным номером.
Пример работающего идентификатора ГРАЖДАНСТВА ниже aи включенный алгоритм для получения действительного / недействительного идентификатора гражданства:
Пример: идентификатор 0308964384007
ZZZ = (0 * 7) + (3 * 6) + (0 * 5) + (8 * 4) + (9 * 3) + (6 * 2) + (4 * 7) + (3 * 6) + (8 * 5) + (4 * 4) + (0 * 3) + (2 *0) = 0 +18 + 0 +32 +27 +12 +28 +18 +40 +16 +0 +0 = 191 191: 11 = 17 81 4 11-4 = 7 ====> Идентификатор правильный
Назовите полученную сумму "ZZZ".Разделим «ZZZ» на 11. Давайте назовем остатки от операции над «OST».Мы вычитаем OST из 11, а затем получаем разницу, которую будем называть «RAZ» (RAZ = 11-OST).
Если значение остальных равно 1 (OST = 1, RAZ = 10), то ID неверен
если значение покоя равно 0 (OST = 0, т. Е. Число ZZZ делится на 11 без остатка), контрольная цифра K равна 0 (K = 0)
if the residue number is between 1 and 11 (1 <OST <11) the control digit K is the difference between 11 and residue (K = RAZ)
Если Kотличается от «RAZ». Идентификатор неверен
Моя математика и мой математический английский не на верхнем уровне, но надеюсь, что кто-то сможет понять это из математического примера, показанного выше.
Эторабочий фрагмент в javascript:
_validateJMBG: function(value, countryCode) {
if (!/^\d{13}$/.test(value)) {
return false;
}
var day = parseInt(value.substr(0, 2), 10),
month = parseInt(value.substr(2, 2), 10),
year = parseInt(value.substr(4, 3), 10),
rr = parseInt(value.substr(7, 2), 10),
k = parseInt(value.substr(12, 1), 10);
// Validate date of birth
// FIXME: Validate the year of birth
if (day > 31 || month > 12) {
return false;
}
// Validate checksum
var sum = 0;
for (var i = 0; i < 6; i++) {
sum += (7 - i) * (parseInt(value.charAt(i), 10) + parseInt(value.charAt(i + 6), 10));
}
sum = 11 - sum % 11;
if (sum === 10 || sum === 11) {
sum = 0;
}
if (sum !== k) {
return false;
}
switch (countryCode.toUpperCase()) {
case 'BA':
return (10 <= rr && rr <= 19);
case 'MK':
return (41 <= rr && rr <= 49);
case 'ME':
return (20 <= rr && rr <= 29);
case 'RS':
return (70 <= rr && rr <= 99);
case 'SI':
return (50 <= rr && rr <= 59);
default:
return true;
}
},
_ba: function(value) {
return this._validateJMBG(value, 'BA');
},
Надеюсь, кто-нибудь может помочь мне сделать это в angular2 + или, по крайней мере, направить меня в правильном направлении. Большое спасибо за потраченное время и усилия!
Чего я пытаюсь достичь?
Если я коснусь ввода и вставлю 13 чисел в поле ввода, я хочу, чтобы он использовал приведенный выше алгоритм для отображения, если введенный идентификатор действителен или недействителен в зависимости от математического результата..