What is the control character (CIN) of the tax code?
The control character (CIN) of the tax code is the 16th and final letter of every Italian codice fiscale, and it is the one digit that turns a string of characters into a self-checking code. It is always a letter, A through Z, and you never choose it. The CIN is calculated from the preceding 15 characters using a fixed algorithm, so it is fully determined the moment the rest of the code exists.
Think of it as a built-in spell-check for your fiscal identity. Type one wrong letter anywhere in the first 15 positions and the math no longer lines up — the control character you'd expect changes, and software flags the mismatch instantly. That's the whole point.
RSSMRA85C15H501R
15 characters + CIN
The acronym stands for Control Internal Number. It belongs to the same family of check-digit schemes you'll find behind an IBAN, an ISBN, or a credit-card number — different formulas, same idea: a redundant character that lets a machine catch human mistakes before they cause damage. The codice fiscale itself is defined by Italian law (DPR 605/1973), and the rules are administered by the Italian Revenue Agency (Agenzia delle Entrate).
Why the control character matters
A tax code travels through a lot of hands. It gets dictated over the phone, copied off a photo, retyped into payroll systems, pasted into contracts. Every one of those steps is a chance to fumble a single character — and a single wrong character can attach your taxes, your medical records, or your employment history to the wrong person. The CIN exists to stop that quietly, before anyone notices something went wrong.
It catches four classic kinds of mistakes:
- Typos: a single character entered incorrectly.
- Transpositions: two adjacent characters swapped — the error people make most and notice least.
- Omissions: a character dropped entirely, leaving the code short.
- Additions: an extra character slipped in where it doesn't belong, sometimes just a stray keystroke.
Without that final letter, a huge share of corrupted codes would sail straight through validation and land in a database looking perfectly legitimate. And a wrong-but-valid-looking tax code is worse than an obviously broken one, because nobody goes looking for it.
Worth a thought
The deliberately scrambled odd-position values let the CIN catch roughly 98% of the most common transcription errors — including the adjacent-digit swap that a simple checksum would miss completely. No check character is perfect, though, and the algorithm freely admits as much: a rare combination of two compensating errors can still slip past it.
The calculation algorithm, step by step
Here's the part people assume is complicated. It isn't. The whole thing is arithmetic mod 26 — a division and a remainder — wrapped around two lookup tables. Five steps, no calculus, and you can do it on paper if you're patient.
Step 1 — Split the positions
Take the first 15 characters and number them 1 to 15, left to right. Separate the odd positions (1, 3, 5, 7, 9, 11, 13, 15) from the even ones (2, 4, 6, 8, 10, 12, 14). The two groups are scored with different tables — that asymmetry is what makes the check strong.
Step 2 — Convert the odd positions
Each character sitting in an odd position is converted using the odd table. These values are intentionally non-sequential (R is 8, S is 12, X is 25) so that swapping two neighbours produces a different total instead of cancelling out.
Step 3 — Convert the even positions
Each character in an even position is converted using the even table, which is the boring one: digits keep their numeric value, and letters take their alphabet position (A=0, B=1, …, Z=25).
Step 4 — Add everything up
Sum all 15 converted values — both groups — into one running total.
Step 5 — Take the remainder
Divide that total by 26 and keep the remainder. A remainder of 0 to 25 maps straight onto a letter (0 → A, 1 → B, …, 25 → Z). That letter is your CIN. Done.
One detail trips people up, so I'll say it plainly: digits and letters can share the same column. In the tables the heading "1/B" means the digit 1 and the letter B are scored identically. That overlap is by design — it's what keeps omocodia replacements valid, a topic worth its own read.
The complete conversion tables
These are the two lookup tables the algorithm runs on, plus the remainder-to-letter map. Bookmark this section; it's the part you'll actually come back to.
Odd positions (1, 3, 5, 7, 9, 11, 13, 15)
Non-sequential by design. This scrambling is the clever bit — it maximises the odds that a real-world slip changes the final letter.
| Char | 0/A | 1/B | 2/C | 3/D | 4/E | 5/F | 6/G | 7/H | 8/I | 9/J |
|---|---|---|---|---|---|---|---|---|---|---|
| Val | 1 | 0 | 5 | 7 | 9 | 13 | 15 | 17 | 19 | 21 |
| Char | K | L | M | N | O | P | Q | R | S | T |
|---|---|---|---|---|---|---|---|---|---|---|
| Val | 2 | 4 | 18 | 20 | 11 | 3 | 6 | 8 | 12 | 14 |
| Char | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|
| Val | 16 | 10 | 22 | 25 | 24 | 23 |
Even positions (2, 4, 6, 8, 10, 12, 14)
Plain and sequential: digits equal their face value, letters equal their place in the alphabet (A=0 … Z=25).
| Char | 0/A | 1/B | 2/C | 3/D | 4/E | 5/F | 6/G | 7/H | 8/I | 9/J |
|---|---|---|---|---|---|---|---|---|---|---|
| Val | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25
Remainder → CIN letter
Once you have the remainder of the division by 26, this is where it becomes a letter.
| Resto | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lettera | A | B | C | D | E | F | G | H | I | J | K | L | M |
| Resto | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lettera | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
A complete worked example
Enough theory. Let's run the real numbers for RSSMRA85C15H501 — the textbook code for a Mario Rossi born on 15 March 1985 in Rome (cadastral code H501). Follow along with the tables above and check my arithmetic; that's the only way to trust it.
Odd positions (1, 3, 5, 7, 9, 11, 13, 15):
R(8) + S(12) + R(8) + 8(19) + C(5) + 5(13) + 5(13) + 1(0) = 78
Even positions (2, 4, 6, 8, 10, 12, 14):
S(18) + M(12) + A(0) + 5(5) + 1(1) + H(7) + 0(0) = 43
Final calculation:
Sum: 78 + 43 = 121
Remainder: 121 mod 26 = 121 − (4 × 26) = 121 − 104 = 17
Letter: 17 → R
So the full, valid tax code is RSSMRA85C15H501R. Change any one of the first 15 characters and rerun the steps — the remainder shifts, the letter changes, and the mismatch gives the error away. That single letter is the whole safety net.
How to verify the CIN without doing the math
You now know exactly how the control character is built. You almost certainly don't want to compute it by hand every time. Nobody does — that's what tools are for, and ours handle the mod-26 arithmetic for you in a fraction of a second.
Paste a code into the tax code validator and it recomputes the CIN, compares it to the 16th character, and tells you straight away whether the code is well-formed. Need to build one from scratch? The codice fiscale calculator generates the complete 16-character code, control letter included, from a person's details. And if you only have the code and want to read the data back out of it, the reverse lookup decodes the parts in plain language. Official confirmation, when you need it, still comes from the Italian Revenue Agency (Agenzia delle Entrate).
Verify your tax code in seconds
Check instantly whether the control character (CIN) of the tax code is correct.
Want to go deeper? Read how the tax code is structured, why omocodia produces those letter-for-digit substitutions, and which calculation errors the CIN is there to catch.
Frequently asked questions
What does the control character (CIN) of the tax code actually do?
It validates the other 15 characters. The CIN is derived from them by a fixed formula, so if any of those characters is wrong, the expected control letter changes and the mismatch exposes the error. It's a checksum, not extra information about you.
Is the CIN always a letter?
Yes — always one letter from A to Z, never a digit. The remainder of the division by 26 (a value from 0 to 25) maps directly to a letter, which is why there are exactly 26 possible outcomes and no numbers among them.
Can I calculate the control character by hand?
Absolutely, and the worked example above shows every step. You convert each character with the odd or even table, add the 15 values, divide by 26, and turn the remainder into a letter. It's tedious but not hard. For anything beyond a one-off, a calculator saves the trouble and the eyestrain.
What happens if the CIN is wrong?
Validation fails. Most public and private systems that accept a codice fiscale recompute the control character and reject the code outright when it doesn't match — so an incorrect CIN usually means a rejected form, a blocked registration, or a flagged record rather than a silent error.
Does the CIN catch every possible mistake?
No, and it doesn't claim to. It reliably catches single-character typos and adjacent-character swaps — the overwhelming majority of real errors — but a rare pair of errors that happen to cancel each other out can still produce a valid-looking letter. It's very good insurance, not a guarantee.
Why are the two conversion tables different?
Because identical tables would be weaker. If odd and even positions scored the same way, swapping two neighbouring characters might leave the sum unchanged and slip past the check. The deliberately non-sequential odd table breaks that symmetry, so transpositions almost always shift the total.
Is the CIN the same as the codice fiscale?
No. The codice fiscale (Italian tax code) is the full 16-character identifier. The CIN is only its last character — the control letter that checks the other 15. People sometimes use "check digit" or "check character" interchangeably; here it's always a letter.
