PESEL

PESEL (Polish "Powszechny Elektroniczny System Ewidencji Ludności", Universal Electronic System for Registration of the Population) is the national identification number used in Poland since 1979. It always has 11 digits, identifies just one person and cannot be changed to another one (except some specific situations such as gender reassignment).
The PESEL number is mandatory for all permanent residents of Poland and for temporary residents living in Poland for over 2 months. After 1 March 2015, applicants for Polish passport without a PESEL number will need to apply for PESEL prior to passport application. Otherwise, without a PESEL number, passport application and fingerprints cannot be taken.
The PESEL was the system designed by the communist government (during PRL) to trace personal information about every citizen. It is a direct offshoot from the previous system, MAGISTER (an acronym spelling out the word 'Master', like a master's degree), which was designed to trace and record data about everyone with a university degree.
Format.
PESEL number has the form of YYMMDDZZZXQ, where YYMMDD is the date of birth (with century encoded in month field), ZZZX is the personal identification number, where X codes sex (even number for females, odd number for males) and Q is a check digit, which is used to verify whether a given PESEL is correct or not.
Checksum calculation.
Having a PESEL in the form of ABCDEFGHIJK, one can check the validity of the number by computing the following expression:
A×1 + B×3 + C×7 + D×9 + E×1 + F×3 + G×7 + H×9 + I×1 + J×3
The checksum is the last digit of result of the above expression subtracted from 10. If this last digit is 0 then the checksum is 0.
If the result of the last operation is not equal to the last digit (K) of a given PESEL, the PESEL is incorrect. This system works reliably well for catching one-digit mistakes and digit swaps.
Example: Checking validity of PESEL 12345678901.
1×1 + 3×3 + 3×7 + 4×9 + 5×1 + 6×3 + 7×7 + 8×9 + 9×1 + 0×3 = 101
The last digit of the result (101 modulo 10): 1
The last digit is not 0 so, the checksum is 10 − 1 = 9
9 is not equal to the last digit of PESEL, which is 8, so the PESEL number contains errors.
How to code this in TypeScript.
export function validatePesel(pesel: string): boolean {
 if (pesel === null || pesel.length !== 11)
 return false;
 const arr = pesel.split("");
 let sum: number = 0;
 for (let i: number = 0; i < arr.length - 1; i++) {
 sum += +arr[i] * getMultiplier(i + 1);
 const modulo = sum % 10;
 const lastD = Number(pesel.substr(pesel.length - 1));
 return (modulo === 0) && lastD === 0 ||
 lastD === 10 - modulo;
function getMultiplier(index: number): number {
 switch (index % 4) {
 case 1: return 1;
 case 2: return 3;
 case 3: return 7;
 case 0: return 9;
 throw "Something went wrong with the index calculation";
Birthdates.
The PESEL system has been designed to cover five centuries. To distinguish people born in different centuries, numbers are added to the MM field:
For example, a person born on December 24, 2002 would have a PESEL number starting with 023224 and person born on December 24, 1902 would have a PESEL number starting with 021224.
Changing the PESEL number.
PESEL contains the date of birth and a sex, so the number is changed if the person changes their sex or corrects their date of birth (for example, the previous date of birth was wrong). The other situation when the number is changed is "if the previous number was produced in the violation of Law" or when a birth certificate of a person changes for any reason (eg. adoption).
When the PESEL number is changed, the person is not allowed to use the previous number anymore. The previous number of a person cannot be given to anyone else.
Other identifiers.
A similar system of identification numbers exists for businesses, called REGON (from "Rejestr Gospodarki Narodowej" – Register of the National Economy). Also all business taxpayers (prior to September 2011 – all taxpayers) have a tax identification number called NIP "(Numer Identyfikacji Podatkowej)".
Individuals in Poland are often asked to provide the number of their Polish identity card "(dowód osobisty)" as identification (foreign citizens give their passport number instead). Similarly, businesses and corporations are often required to state the number at which they appear in the register of businesses, KRS - National Judicial Register (Krajowy Rejestr Sądowy), or the Taxpayer Identification Number - NIP.