International · Validation

Romanian CNP validator.

Check a 13-digit Romanian Cod Numeric Personal (CNP): the control digit, the encoded date of birth, the sex/century digit and the county code. Format and checksum only.

How it works: multiply the first 12 digits by the constant 2 7 9 1 4 6 3 5 8 2 7 9, add the products and divide by 11. The remainder is the 13th digit; a remainder of 10 becomes 1.

Sources: C.N.P. specification (vimishor/cnp-spec), Romanian Wikipedia, python-stdnumVerified 29 September 2026

Advertisement

Inputs

Enter all 13 digits. Spaces and hyphens are ignored.

Result

Enter a CNP and press Check.

How the CNP is built

A CNP is 13 digits: S AA LL ZZ JJ NNN C. It is assigned to people born in Romania and to Romanian residents.

The seven components (C.N.P. specification)
PartMeaning
SSex and century: 1 male / 2 female born 1900–1999; 3 / 4 born 1800–1899; 5 / 6 born 2000–2099; 7 / 8 male / female resident (century not encoded)
AA LL ZZYear (last two digits), month and day of birth
JJCounty code (01–52 as published, 41–46 are Bucharest districts); 70 is the unique code used by the newer integrated system
NNNSequence number 001–999 for people of the same sex, place and date
CControl digit

Control digit: weights 2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9 (the constant 279146358279) on the first 12 digits; sum the products; the remainder mod 11 is the control digit, except that a remainder of 10 gives 1. Worked example from the python-stdnum test suite: 1630615123457 sums to a remainder of 7, and decodes to a man born 15 June 1963 with county code 12 (Cluj).

Other checks: the date must be a real calendar date (leap days follow the Gregorian rule), the county code must be in the published table, and Bucharest districts 7 and 8 (codes 47 and 48) are rejected for birth dates after 19 December 1979, when the specification says they were abolished. First digit 9 and county codes 80–83 appear in python-stdnum only, not in the specification, so this tool rejects them.

Format and checksum only — not a registry lookup

A pass means the number is well-formed and internally consistent. It cannot confirm the CNP was ever issued or that it belongs to anyone; only the Romanian authorities can do that. The specification lists the issuers as DEPABD for citizens and the General Inspectorate for Immigration for residents.

Sources: vimishor/cnp-spec, spec.md; ro.wikipedia.org, Cod numeric personal; python-stdnum, stdnum/ro/cnp.py. The constant is identical in all three.

Checksum only — not a registry lookup

A CNP is personal data. This tool runs entirely in your browser: nothing you type is transmitted, stored or logged, and it does not query any Romanian system. Do not paste other people's CNPs unless you have a legitimate reason to hold them.

Advertisement
Advertisement
Listening…