Южноафриканската лична карта е основно доказателство за самоличност за гражданите на Южна Африка, известна също като Смарт лична карта. Тази карта е подобна точно като Aadhar Card в Индия или Social Security Card в САЩ. Състои се от пълното име на лицето, заедно с датата и мястото на раждане, снимка на лицето и уникален идентификационен номер. За всяка официална работа в почти всички документи ще ви е необходим този уникален номер, ако присъствате в Южна Африка. За да научите повече за южноафриканската лична карта, можете да се обърнете към тук. Нека декодираме SA ID номера.
Южноафриканският идентификационен номер е 13-цифрено число, което може да бъде представено в следния формат: YYMMDDSSSSCAZ. За да го разберем, можем да вземем пример като „8801235111088“.
- Първите 6 цифри (ГГММДД) се основават на вашата дата на раждане. 23 януари 1988 г. може да бъде представен с 880123.
- Следващите 4 цифри (SSSS) се използват за определяне на вашия пол. На жените се присвояват номера в диапазона 0000–4999, а на мъжете от 5000–9999. В нашия пример това е 5111, което се откроява за кандидат-жена.
- Следващата цифра (C) показва дали сте статут на гражданин на SA, като 0 означава, че сте роден гражданин на SA, а 1 означава, че сте постоянно пребиваващ.
- Следващата цифра (A) се използва до 1980 г. Тази цифра класифицира расата на човека.
- Последната цифра (Z) е цифра на контролна сума — използва се за проверка дали числовата последователност е точна с помощта на зададена формула, наречена алгоритъм „Luhn“.
И така, какво представлява алгоритъмът на Luhn и как да го използваме?
Алгоритъмът на Luhn или формулата на Luhn е известен също като алгоритъм „mod 10“. Името е измислено от неговия създател Ханс Петер Лун, който е бил учен в IBM. Този алгоритъм се използва за валидиране на различни идентификационни номера по целия свят, като номер на кредитна карта, израелски идентификационен номер, канадски социалноосигурителен номер, IMEI номер и дори гръцки социалноосигурителен номер. Нека подчертаем стъпките, чрез които цифрата на контролната сума се използва за валидиране на номера.
Така че имаме нашата контролна цифра в най-десния ъгъл. Ще се преместим от числото вляво от цифрата на контролната сума и ще продължим да се движим наляво и ще извършим следните операции:
- Ще удвоим алтернативно позиционирани числа и ако удвоеното число е по-голямо от 9, ще добавим цифрата на числото или еквивалентно ще извадим 9 от удвоеното число. Да вземем пример от по-горе: „8801235111088“. Тук най-дясната цифра е 8, което е цифрата на контролната сума. Цифрата вляво от контролната сума е 8. Ще я удвоим (2 x 8 = 16). Тъй като удвоеното число е по-голямо от 9, ще съберем цифрите (1 + 6 = 7). Сега следващото число е 0, което ще запазим същото и ще преминем към следващото число 1, което ще бъде удвоено (1 x 2 = 2). Тъй като е по-малко от 9, ще го оставим такъв, какъвто е. Така SA Id „8801235111088“ в края на първата стъпка става „8702265212078“.
- Сега трябва да сумираме всички цифри, включително цифрата на контролната сума. В нашия пример сумата става 50.
- Сега, ако сборът по модул 10 е равен на нула, числото е валидно според формулата на Лун, в противен случай не е.
Нека обобщим алгоритъма в Javascript код:
<script> function LuhnAlgo(x){ document.write(“Luhn Algorithm Implementation\n”); var arr = […x]; //we have converted the string into array var sum = 0; // This variable will consists of sum after step 3 var n = arr.length; for(var i=0;i<n;i++){ arr[i]=parseInt(arr[i]); // converting from character to int } for(var i=1;i<n;i=i+2){ // execution of step 1 var v = arr[n-1-i]*2; if(v>9){ arr[n-1-i] = v-9; } else{ arr[n-1-i] = v; } } for(var i=0;i<n;i++){ //calculating the step sum=sum+arr[i]; } if(sum%10 === 0) document.write(true); else document.write(false); </script>
Има ли библиотеки на Python за южноафрикански идентификационен номер?
Да, „rsa-id-number“ е библиотека на Python, която е одобрена от MIT Licensed. Съдържа различни функции за валидиране и извличане на информация от SA-ID номера.
За да инсталирате просто използвайте:
$ pip install rsa-id-number
Нека да разгледаме някои употреби на тази библиотека на Python:
>>> import rsaidnumber
>>> id_number = rsaidnumber.parse('8801235111088')
>>> id_number.valid
True
>>> id_number.date_of_birth
datetime.datetime(1988, 1, 23, 0, 0)
>>> id_number.gender
<Gender.MALE: 2>
>>> id_number.citizenship
<Citizenship.SA_CITIZEN: 1>
>>> id_number = rsaidnumber.parse('8801235111080')
Traceback (most recent call last):
...
ValueError: '8801235111080' contains an invalid checksum digit!
>>> id_number = rsaidnumber.parse('8801235111080', False)
>>> id_number.valid
False
Надяваме се, че ви е харесало да научите всичко това.