A package for handling Czech and Slovak Personal ID
npm install rodnecisloA npm package for validating and deriving information from Czech and Slovak National Identification Number.
This number is used in Czech and Slovak Republic as the primary unique identifier for every person
by most, if not all, government institutions, banks, etc. It consists of two parts: birth date
(with gender mark) and serial number with check digit. It is commonly known as Birth Number
or rodné číslo in both Czech and Slovak hence the library name.

Works with Node.js v12 and higher (ES modules).
``sh`
npm install rodnecislo
`javascript
import { rodnecislo } from 'rodnecislo';
// let { rodnecislo } = require("rodnecislo")
let rc = rodnecislo('111213/3121')
rc.isMale() // true
rc.isFemale() // false
rc.year() // 2011
rc.month() // 11 - zero based month
rc.day() // 13
rc.birthDate() // new Date(2011, 11, 13) - "Tue Dec 13 2011 00:00:00 GMT+0100 (CET)"
rc.birthDateAsString() // "13.12.2011" - the Czech date format
rc.isValid() // true
rc.isPossible() // true (valid, but maybe in the future)
rc.isAdult() // false - by default checks if current date is above 18 years old
rc.isAdult(21) // false - for US
rc.age() // 5 - age today (it is 5.6.2017 ;)
rc.dic() // "CZ1112133121" - Czech Tax Identification Number (DIč)
`
Before 1953
- People in Czechoslovakia have Personal ID Card Number or
Work ID Card Number. It isn't called birth number/rodne cislo yet.
- It has format yymmdd/sssmm+50
- Women have sss
- is serial number for people born on the same day516231/016
- Eg: is birth number of a female, born on 31 Dec 1951
After 1953
- Birth number is official now
- It has format: yymmdd/ssscmm+50
- Women have: (yymmddsss % 11 == 10 && c == 0)
- Whole PIN must be divisible by 11 OR
- If then the birth number is valid
After 1985
- The (yymmddsss % 11 == 10 && c == 0) exception was removed
- ... every new birth number must be divisible by 11 as a whole from now on
In 1993 Czechoslovakia split into Czech Republic and Slovak Republic
- the legislation might differ from this point on
After 2004
- Since 2004 (law nr. 53/2004) it is possible to add extra 20 to the month number in case the number
of newborns exceeds all the possible combinations of birth date/birth number divisible by 11.
In conclusion:
- Men can also have mm+20mm+70
- Women can also have
Short/long version
- Short version was used before 1953
- Long version AND yy >= 54 THEN yyyy = 19yyyy < 53
- Long version AND THEN yyyy = 20yy
- Who knows what comes in 2053...
Month/Gender
- Month is 51-62 OR 71-82 - female, subtract 50 and 70 respectively01-12
- Month is OR 21-32 - male, subtract 20
Modulo condition
- Short birth number - no modulo condition
- Whole birth number is divisible by 11 - valid birth number
- Whole birth number without check digit modulo 11 equals 10 AND check digit is 0 AND year is 54-85 - valid birth number
According to Civil code §601 law n. 89/2012 and §30 of New Civil Code an
age is reached at midnight which is starting the birthday. So on the first
seconds of your 18th birthday you can start drinking in Czech.
In Czech the personal VAT Identification Number
is derived from Birth Number by adding CZ prefix and ommitting the slash..dic()
It is called Daňové identifikační číslo (DIČ)
hence the method.
``
| 1 | 2a | 2b | 2c | 2d | 3 |4 | 5 |
/^\d{0,2}((0[1-9]|1[0-2])|(2[1-9]|3[0-2])|(5[1-9]|6[0-2])|(7[1-9]|8[0-2]))(0[1-9]|[1-2][0-9]|3[01])\/?[0-9]{3,4}$/;
Explanation:
* 1 - 00-99 birth year, i.e. yymm
* 2 birth month, i.e. dd
- a - 01-12 for men
- b - 21-32 for men\*
- c - 51-62 for women
- d - 71-82 for women\*
* 3 - 01-31 birth day, .i.e. xxxx`
* 4 - slash
* 5 - 000-9999 serial and check digit, .i.e