Южноафриканската лична карта е основно доказателство за самоличност за гражданите на Южна Африка, известна също като Смарт лична карта. Тази карта е подобна точно като 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 номер и дори гръцки социалноосигурителен номер. Нека подчертаем стъпките, чрез които цифрата на контролната сума се използва за валидиране на номера.

Така че имаме нашата контролна цифра в най-десния ъгъл. Ще се преместим от числото вляво от цифрата на контролната сума и ще продължим да се движим наляво и ще извършим следните операции:

  1. Ще удвоим алтернативно позиционирани числа и ако удвоеното число е по-голямо от 9, ще добавим цифрата на числото или еквивалентно ще извадим 9 от удвоеното число. Да вземем пример от по-горе: „8801235111088“. Тук най-дясната цифра е 8, което е цифрата на контролната сума. Цифрата вляво от контролната сума е 8. Ще я удвоим (2 x 8 = 16). Тъй като удвоеното число е по-голямо от 9, ще съберем цифрите (1 + 6 = 7). Сега следващото число е 0, което ще запазим същото и ще преминем към следващото число 1, което ще бъде удвоено (1 x 2 = 2). Тъй като е по-малко от 9, ще го оставим такъв, какъвто е. Така SA Id „8801235111088“ в края на първата стъпка става „8702265212078“.
  2. Сега трябва да сумираме всички цифри, включително цифрата на контролната сума. В нашия пример сумата става 50.
  3. Сега, ако сборът по модул 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

Надяваме се, че ви е харесало да научите всичко това.