The Six Letters a Canadian Postal Code Never Uses
D, F, I, O, Q and U never appear in a Canadian postal code, and the first letter is a province shorthand that quietly fails at the edges. Both facts are useful and both are commonly misused.

Canadian postal codes alternate letters and digits, but they do not use the whole alphabet. Six letters are excluded entirely, and knowing which ones is the cheapest validation check available for a Canadian address.
The excluded six
D, F, I, O, Q and U never appear anywhere in a Canadian postal code. The reason is mechanical rather than linguistic: those letters are too easily confused with digits or with each other by the optical equipment that reads addresses at sorting speed.
The confusions are the ones you would guess. O against zero and I against one are the obvious pairs. D against O, Q against O and U against V are the ones that only become a problem when a machine is reading handwriting at volume rather than a person reading a printed label.
This gives you a genuinely useful check. If somebody types M5O 2T6, you know without consulting anything that it is wrong, and you can tell them so immediately rather than letting the order fail later. Most postal systems offer nothing like this — a five-digit ZIP code made of plausible digits is indistinguishable from a real one.
| Letter | Confused with |
|---|---|
| D | O, and zero |
| F | E, in some handwriting |
| I | One, and the digit sequence |
| O | Zero |
| Q | O, and zero |
| U | V |
Two further letters, W and Z, are valid inside a code but never appear as the first character. That is an allocation decision rather than a legibility one, and it is worth encoding if you are validating the leading letter against a list.
What the first letter tells you
The opening letter is a postal district, and for most of the country it maps cleanly to one province or territory. A is Newfoundland and Labrador. B is Nova Scotia. T is Alberta. V is British Columbia. If you have lived in Canada you probably know your own without thinking about it.
The mapping is not one-to-one, and the exceptions are not obscure corners. Quebec and Ontario are each large enough to need several letters, which between them account for a very large share of the population. And the Northwest Territories and Nunavut share a single letter, so that letter cannot identify a territory at all.
If you need the province, take it from the address. The postal code answers a question about mail routing, and it answers it well; it is a convenient but unreliable proxy for administrative geography.
What the excluded letters let you check
Most address validation can only ever tell you that a value looks plausible. The Canadian letter rules go further: they let you reject a specific, common class of real error with complete confidence and no lookup at all.
The error they catch is the one people actually make. Reading a postal code off a handwritten note or a photograph, somebody types the letter O where a zero belongs, or the digit 1 where an I appears to be. Because neither letter can legitimately occur, you can say so immediately and ask them to check, while they are still looking at the source. No other common postal format gives you that.
It is worth being clear about the limit, though. Rejecting an impossible code is not the same as confirming a possible one. M5V 2T6 passes every structural rule whether or not it has ever been issued, and the only way to know is to look it up.
The special codes
A handful of codes do not describe geography at all. Some belong to a single organisation that receives enough mail to need its own, so the code names a recipient rather than a place. Canada Post also runs at least one famously non-geographic code for seasonal mail addressed to the North Pole, which is handled as a real delivery operation with real volunteers answering it.
These are rare enough to ignore in most systems and worth knowing about when an address looks impossible. A code that validates cleanly but maps nowhere sensible is more likely to be one of these than a typo.
What this does not catch
It is worth being clear about the limits of a letter rule, because it is easy to over-trust a check that works so cleanly.
Rejecting the excluded letters catches a transcription error. It does not catch a transposition — M5V typed as M5B is structurally perfect and points somewhere else entirely. It does not catch a code that has never been issued. And it does not catch the commonest error of all, which is a real postal code belonging to a different address than the one the customer meant.
So treat the letter rules as a cheap first filter that improves the error message, not as validation. Anything that has to be correct still needs a lookup against real address data.
The error message is most of the value here. "That does not look like a Canadian postal code — it contains the letter O, which is never used" tells somebody exactly what to look at. A generic "invalid postal code" sends them round the same loop typing the same thing, and is one of the commonest reasons a checkout is abandoned at the address step.
Where the letter actually comes from
The first letter was allocated roughly east to west rather than being derived from a province name, which is why it looks arbitrary. A is in the far east, in Newfoundland and Labrador; V is in the far west, in British Columbia. Reading the letters as initials — B for British Columbia, for instance — produces confident wrong answers, because B is Nova Scotia.
Within Quebec and Ontario, the several letters each province holds were allocated to split the population into manageable sorting regions rather than to mark anything a resident would recognise as a boundary. Two people a couple of hours apart may hold different first letters without that difference meaning anything administratively.
The upshot is the same as everywhere else in this system: the code describes how post moves, and reading it as a statement about geography works until it suddenly does not. The letters are a convenient shorthand for people who already know the answer.
Putting it together
- Reject D, F, I, O, Q and U anywhere in the code. This catches real typing errors immediately.
- Reject W and Z as the first character.
- Check the alternating pattern: letter, digit, letter, space, digit, letter, digit.
- Do not derive a province from the first letter if anything depends on being right.
- Accept that a structurally valid code may still not exist. Only a lookup can tell you that.
For what the two halves of the code actually mean, see the FSA and LDU guide. For the storage and form rules these checks belong in, see validating Canadian postal codes. And if you simply need the code where you are, you can find it from your location.
Detect my postal code now Skip the reading — get the postal code for where you are standing.
Detect your postal code from your current location
No typing and no address lookup. Your browser asks for permission, your device works out where it is, and the postal code in Canada comes back in seconds. Nothing is sent until you press the button.
Your location is only used to find your postal code.