Serbia JMBG Validator

Validate a Serbian JMBG number with full modulo-11 checksum and decoded fields.

Ad placeholder (leaderboard)
Enjoying the tools? Go Pro for £4.99 (one-time) and remove all ads — forever, on this device. Remove ads — £4.99

The JMBG (Jedinstveni matični broj građana — Unique Master Citizen Number) is the 13-digit personal identification number used in Serbia and the other republics of the former Yugoslavia. This tool validates a JMBG by checking the date of birth embedded in the first seven digits, the registration region code, and the modulo-11 check digit, then displays a structured breakdown of every encoded field — all entirely in your browser.

How it works

The validator processes the number in five sequential checks and shows a pass or fail row for each:

  1. Length — a JMBG is always exactly 13 digits; anything shorter or longer immediately fails.
  2. Month range — digits 3–4 must be 01–12.
  3. Day range — digits 1–2 must be valid for the decoded month, including leap-year handling for 29 February.
  4. Region code — digits 8–9 are matched against the published JMBG region table for Serbia and the former-Yugoslav republics.
  5. Modulo-11 check digit — the final digit is compared against the value computed by the algorithm below.

The overall verdict is Valid only when all five checks pass.

Structure of a JMBG

The 13 digits are divided into four segments:

SegmentPositionMeaning
DDMM1–4Day and month of birth
GGG5–7Last three digits of the birth year (800–999 → 19th/20th century; 000–799 → 21st century)
RR8–9Registration region code
BBB10–12Serial (under 500 = male, 500 and over = female)
K13Modulo-11 check digit

The check-digit formula

Given digits d₀ through d₁₁ and the weight vector w = [7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2]:

S = Σ(dᵢ × wᵢ) for i = 0 … 11

m = 11 − (S mod 11)

K = m if 1 ≤ m ≤ 9, otherwise K = 0 (handles m = 10 and m = 11)

This is a variant of the ISO/IEC 7064 MOD 11-2 scheme adapted for the 13-digit JMBG format.

Worked example

Take the obviously-fake number 0101990710006 (a made-up test value — do not use for real data):

  • 01 01 990 → 1 January 1990 (GGG = 990, century = 1000, year = 1990)
  • 71 → Belgrade registration area
  • 000 → serial 0, male
  • Check-digit calculation: S = 0×7 + 1×6 + 0×5 + 1×4 + 9×3 + 9×2 + 0×7 + 7×6 + 1×5 + 0×4 + 0×3 + 0×2 = 6 + 4 + 27 + 18 + 42 + 5 = 102; m = 11 − (102 mod 11) = 11 − 3 = 8; wait — let me recompute inline: 102 mod 11 = 102 − 99 = 3, so m = 8 and the expected check digit is 8, not 6 — meaning 0101990710006 fails the checksum (intentionally, as a demonstration that not every 13-digit string passes).

For a number to pass all five checks, the final digit must equal the value the algorithm computes from the first twelve. Changing just one digit anywhere in the number alters the checksum calculation and typically produces a mismatch.

Privacy

All validation is performed with JavaScript running locally in your browser. The number you enter is never sent to a server, stored in a database or logged anywhere. You can use the tool without an internet connection once the page has loaded.

Ad placeholder (rectangle)