Проверка южноафриканского удостоверения личности
Как я могу проверить, что номер, вставленный в текстовое поле, является действительным южноафриканским идентификатором, и если это мужчина или женщина
Посмотрите здесь (код c# можно найти в нижней части страницы):
http://geekswithblogs.net/willemf/archive/2005/10/30/58561.aspx[^]
Удачи вам!
хорошая ссылка 5+
Формат обычного южноафриканского идентификационного номера выглядит следующим образом{YYMMDD}{G}{SSS}{C}{A}{Z}
YYMMDD: Дата рождения
G : Пол. 0-4 Женщины; 5-9 Мужчин.
SSS : порядковый номер для комбинации DOB/G.
С : Гражданство. 0 SA; 1 другое.
А : обычно 8 или 9 (могут быть и другие значения)
Z : контрольная цифра.
Следующая логика объясняет, как работает контрольная цифра:
Для этого объяснения я собираюсь использовать идентификационный номер 860506 5 397 08 3
а) сложить все цифры идентификационного номера в нечетные позиции (за исключением последнего числа, которое является контрольной цифрой):
8+0+0+5+9+0 = 22
б) возьмите все четные цифры как одно число и умножьте его на 2:
656378 * 2 = 1312756
в) сложите цифры этого числа вместе (в б)
1+3+1+2+7+5+6 = 25
г) добавить ответ С к ответу а
22+25 = 47
д) вычтите второй символ из D из 10, теперь это число должно равняться контрольному символу
10-7 = 3 = управляющий символ (3)
и поэтому, если вам когда-нибудь придется подтвердить идентификационный номер, это будет лучший способ сделать это ...
Ниже приведены дополнительные ссылки:
Из чего состоит южноафриканский идентификационный номер?
{Resloved} проверка пола идентификационного номера
Большое спасибо, через 7 лет ты мне помог.
Я построил рабочую функцию с помощью PHP
ПОЛНЫЙ HTML И PHP КОД С ДОПОЛНИТЕЛЬНЫМИ ФУНКЦИЯМИ
<html> <body> <form method="post" action="<?=$_SERVER['PHP_SELF'];?>"> <p>Enter the ID Number: <input name="idnumber" type="text" id="idnumber" /> </p> <p> <input type="submit" value="Check" /> </p> </form> </body> </html> <?php Validate($_POST['idnumber']); function Validate($idNumber) { $correct = true; if (strlen($idNumber) !== 13 || !is_numeric($idNumber) ) { echo "ID number does not appear to be authentic - input not a valid number"; $correct = false; die(); } $year = substr($idNumber, 0,2); $currentYear = date("Y") % 100; $prefix = "19"; if ($year < $currentYear) $prefix = "20"; $id_year = $prefix.$year; $id_month = substr($idNumber, 2,2); $id_date = substr($idNumber, 4,2); $fullDate = $id_date. "-" . $id_month. "-" . $id_year; if (!$id_year == substr($idNumber, 0,2) && $id_month == substr($idNumber, 2,2) && $id_date == substr($idNumber, 4,2)) { echo 'ID number does not appear to be authentic - date part not valid'; $correct = false; } $genderCode = substr($idNumber, 6,4); $gender = (int)$genderCode < 5000 ? "Female" : "Male"; $citzenship = (int)substr($idNumber, 10,1) === 0 ? "citizen" : "resident";//0 for South African citizen, 1 for a permanent resident $total = 0; $count = 0; for ($i = 0;$i < strlen($idNumber);++$i) { $multiplier = $count % 2 + 1; $count ++; $temp = $multiplier * (int)$idNumber{$i}; $temp = floor($temp / 10) + ($temp % 10); $total += $temp; } $total = ($total * 9) % 10; if ($total % 10 != 0) { echo 'ID number does not appear to be authentic - check digit is not valid'; $correct = false; } if ($correct){ echo nl2br( "\nSouth African ID Number: ". $idNumber . ' Birth Date: ' . $fullDate. ' Gender: ' . $gender . ' SA Citizen: ' . $citzenship); } }
На семь лет опоздал.