How to validate a Singapore NRIC number

The last character of an NRIC or FIN is a weighted checksum of everything before it. If that letter agrees with the arithmetic, the number is internally consistent; if it does not, at least one character is wrong. This guide shows the check, the worked numbers, and what a pass cannot tell you.

How to run the check

  1. Write the number as nine unbroken characters. One prefix letter, seven digits, one check letter, for example S1234567D. Spaces and dashes are not part of the number, and lowercase is fine.
  2. Paste it into the Single Checker field. The verdict appears as you type. There is no button to press and no request to wait for.
  3. Read the result. Valid means the check letter is the one the Mod-11 arithmetic produces for those seven digits and that prefix. Checksum Mismatch means it is not, and the checker tells you the letter it expected instead.
  4. Open the math breakdown under the verdict. It shows every digit multiplied by its weight, the series offset added to the total, and the remainder that selects the check letter.

Know what this cannot do. This is a format and arithmetic check, not a database lookup. Nothing here asks whether a number exists, whether it has been cancelled, or whose it is. Read a valid checksum as proof that a number is well formed, never as proof that a person is who they say they are.

Three numbers that show how it works

These three share all seven digits and the same weighted sum of 106. Only the prefix changes what happens next, which is why the same digits give a different answer under each prefix:

Worked validations. Only the prefix, offset and expected letter differ.
NumberWeighted sumOffsetTotalmod 11ExpectedVerdict
S1234567D106+01067Dmatches D
T1234567J106+41100Jmatches J
F1234567N106+01067Nmatches N

Each row runs the same six steps: multiply the digits by the fixed weights [2, 7, 6, 5, 4, 3, 2], add the series offset (S 0, T 4, F 0, G 4, M 3), take the remainder modulo 11, and look the remainder up in that series family table. Paste any of the three into the checker and the breakdown above the tabs shows the identical result.

When a character is unreadable

A smudged card or a redacted photocopy leaves a gap the arithmetic can close. Enter the nine-character pattern into the Reverse Solver with ? for anything unknown: one unknown digit always resolves to exactly one answer, because 11 is prime and every weight is coprime with it. Two or more unknowns return a candidate list instead — several pairs can satisfy one equation, and nothing on the page can tell them apart.

Nothing you type is sent anywhere. Validation is a JavaScript function running inside the page: it reads the string you entered, does the arithmetic, and writes the result back to the screen. There is no upload, no server call and no log — the number stays in the tab.

Limits worth knowing

Frequently asked questions

How do I validate an NRIC number?

Write it as nine unbroken characters, one prefix letter, seven digits and one check letter, for example S1234567D, and paste it into the Single Checker field. The verdict appears as you type: Valid means the check letter is the one the Mod-11 arithmetic produces, and Checksum Mismatch names the letter it expected instead.

Does a valid checksum prove the NRIC is real?

No. A match means the number is internally consistent, which catches typos, transposed digits and invented numbers. Nothing here asks any office whether the number was issued, cancelled, or belongs to the person holding it.

Read a pass as proof the number is well formed, never as proof of identity.

Can I recover an NRIC with a smudged character?

Yes, with the Reverse Solver. Enter the nine-character pattern with ? for anything unknown, and it enumerates every candidate that reproduces your check letter.

One unknown digit always resolves to exactly one answer; two or more unknowns return a candidate list instead, because several pairs can satisfy one equation.

Is it safe to paste a real NRIC into the checker?

Yes here, and that is the point. Validation is a JavaScript function running inside the page: it reads the string, does the arithmetic, and writes the result back to the screen.

There is no upload, no server call and no log, so the number never leaves your tab.

What test numbers can I use without touching real data?

Use the Generator tab for synthetic numbers with correctly computed check letters, up to 1,000 per batch as text or JSON.

For hand checks, S1234567D, T1234567J and F1234567N are arithmetically valid and share the same seven digits, which makes them ideal for showing what the prefix changes.

Part of the free NRIC Validator and Solver on aczh.dev — no sign-up, no ads, and nothing you type ever leaves your browser. Verified against the live tool in October 2026. If a guide here saved you from handing an identity number to a stranger's server, a one-off contribution keeps the hosting covered: support aczh.dev.