Postcodes and personalised number plates

by Dave Barter on

I walk to work every day and pass lines of traffic with bored drivers staring vacantly into the distance. Many of these commuters have invested in personalised number plates for their cars to help enhance their own personal brand. I have to admit that it’s not for me as they cost a minimum of £250 and often need explanation. I’m yet to tap on the window of G7 PMQ and ask whether the occupant is Theresa May? (see..they need explanation!).

Regardless of what you think of them, there is a certain ingenuity displayed by many of their owners in using numerics to represent letters. For example:-

H1 5UE (Hi Sue)

K4 REN (Karen)

B16 BOY (BIG BOY)

K1 NKY (you get the picture)

Now whilst I don’t own a personalised number plate I am in possession of a postcode. It’s SN3 1QG and try as I might I can only make it say “SNEIQG” which doesn’t mean anything at all in any language I can Google. But it got me wondering whether their were others out there with slightly more meaningful postcodes. So I thought I’d have a look.

Firstly I downloaded the Ordnance Survey postcode open data from their excellent data portal and imported it into a PostgreSQL database. Then I created by potential word set by replacing the numerics in the postcodes with relevant substitute letters:-

CREATE OR REPLACE VIEW data_os_opendata.opennames_postcodes AS
SELECT wkb_geometry,
       id,
       name1 as postcode,
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       REPLACE 
       (name1, 
       '1', 'I'), 
       '2', 'Z'), 
       '3', 'E'), 
       '4', 'A'),
       '5', 'S'),
       '6','G'),
       '7','Y'),
       '8', 'B'),
       '9','G'),
       '0','O'),
       ' ','') AS lexical
FROM data_os_opendata.opennames WHERE local_type='Postcode'

The code above created me a nice view with postcodes looking as follows:-

"KA10 6JH","KAIOGJH"
"KA8 9LX","KABGLX"
"KA11 1AZ","KAIIIAZ"
"KA1 5RD","KAISRD"
"KA8 8AY","KABBAY"
"KA12 0UG","KAIZOUG"
"KA9 1PS","KAGIPS"
"KA7 3GZ","KAYEGZ"
"KA12 0PE","KAIZOPE"
"KA12 8EN","KAIZBEN"
"KA7 3NY","KAYENY"
"KA12 0SQ","KAIZOSQ"
"KA11 4BF","KAIIABF"

So far so good but none of those look like words to me so we need to filter out the rubbish. This is going to need a dictionary of words and luckily I’m running on a Linux system which comes with a text file used for spell checks so a few little bits of SQL are all that are needed to get me going:-

CREATE TABLE data_misc.dictionary (word TEXT);
COPY data_misc.dictionary (word) FROM '/usr/share/dict/words' WITH CSV;
UPDATE data_misc.dictionary SET word = UPPER(word);

Now to find our word list. I achieved this with a simple table join:-

CREATE VIEW data_os_opendata.wordy_postcodes AS
SELECT id,postcode, lexical, word,wkb_geometry
FROM data_os_opendata.opennames_postcodes 
LEFT JOIN data_misc.dictionary ON lexical = word
WHERE word is not null

This gave me 220 words all of which should be valid English. Scrolling through the list gave me a few interesting places!

GEEZER (G33 2ER — clearly where you go for a good deal)

OXYGEN (OX7 6EN — don’t strike a match here)

LEGEND (L39 3ND — where Chris Boardman lives)

LEEDS (L3 3DS — NO!! It’s Liverpool )

I created a map of some of these in QGIS as shown below, but did remove one seriously offensive word which I’ll let you discover by yourself.

1_CO0jVYaSJr7KfuOfzFsTVg
Postcode Word map of the UK — (Contains OS data © Crown copyright and database right 2018)

Not sure I want to live in a certain part of Portsmouth…

The full list of wordy postcodes can be seen below. There are a few restrictions in that I’m only picking up single words but real work calls me back to the terminal and I’ll leave it for someone else to pick up the baton. But I hope you agree this has been an interesting exercise and maybe you‘re fortunate enough to live in an area with a postcode worth it’s own personalised plate.

"G46 6ED","GAGGED"
"G41 3TY","GAIETY"
"PA3 4NS","PAEANS"
"G33 1NG","GEEING"
"G33 2ER","GEEZER"
"NE6 4TE","NEGATE"
"L39 9ED","LEGGED"
"L39 4TE","LEGATE"
"PR1 5SY","PRISSY"
"PR4 6UE","PRAGUE"
"LA9 9ED","LAGGED"
"LA9 6ED","LAGGED"
"BL1 6HT","BLIGHT"
"BL3 4RY","BLEARY"
"PR3 3NS","PREENS"
"CH49 4LL","CHAGALL"
"CH45 1NG","CHASING"
"L1 9HT","LIGHT"
"L3 6AL","LEGAL"
"L3 6ER","LEGER"
"L7 3LL","LYELL"
"CH41 5ES","CHAISES"
"L4 1RS","LAIRS"
"WA6 0NS","WAGONS"
"WA6 9LE","WAGGLE"
"WA9 3RS","WAGERS"
"WA9 1NG","WAGING"
"L36 6ED","LEGGED"
"L35 5EN","LESSEN"
"L35 5EE","LESSEE"
"ST3 3PS","STEEPS"
"ST3 3LY","STEELY"
"ST3 4DS","STEADS"
"ST3 3LE","STEELE"
"ST4 6ED","STAGED"
"ST4 7ED","STAYED"
"ST3 4DY","STEADY"
"M3 5AS","MESAS"
"M3 6AN","MEGAN"
"M3 4LY","MEALY"
"M3 4NS","MEANS"
"M34 5LY","MEASLY"
"M1 2AR","MIZAR"
"M4 7AN","MAYAN"
"M15 5AL","MISSAL"
"M34 6AN","MEAGAN"
"SK1 3RS","SKIERS"
"M3 7ER","MEYER"
"B79 0NE","BYGONE"
"S1 2ED","SIZED"
"LE5 5EN","LESSEN"
"LE4 9UE","LEAGUE"
"LE5 5EE","LESSEE"
"GL3 4NS","GLEANS"
"DY3 1NG","DYEING"
"B36 9AR","BEGGAR"
"OX7 6EN","OXYGEN"
"OX7 9EN","OXYGEN"
"LE9 4LS","LEGALS"
"LE9 4TE","LEGATE"
"BA5 1NS","BASINS"
"BA6 9ED","BAGGED"
"BA9 9ED","BAGGED"
"SN16 9ER","SNIGGER"
"SP3 4RS","SPEARS"
"SP3 4RS","SPEARS"
"GU7 1NG","GUYING"
"SL1 6HT","SLIGHT"
"SL1 3ST","SLIEST"
"TR7 1NG","TRYING"
"PL1 3RS","PLIERS"
"PL4 7ER","PLAYER"
"PO5 1NG","POSING"
"HU6 9ED","HUGGED"
"HU9 3ST","HUGEST"
"HU5 5AR","HUSSAR"
"HU8 8UB","HUBBUB"
"PE6 9ED","PEGGED"
"AL1 3NS","ALIENS"
"EN9 1NE","ENGINE"
"EN6 1NE","ENGINE"
"SL0 9AN","SLOGAN"
"HA5 5LE","HASSLE"
"HA7 1NG","HAYING"
"W7 3TH","WYETH"
"CR3 5TS","CRESTS"
"BR3 4TH","BREATH"
"BR1 3RS","BRIERS"
"SW16 9ED","SWIGGED"
"SW15 5ES","SWISSES"
"BR1 4NA","BRIANA"
"SW4 7ED","SWAYED"
"W4 1TE","WAITE"
"SE1 2ES","SEIZES"
"CR0 4TS","CROATS"
"CR4 2ED","CRAZED"
"SW1P 1NG","SWIPING"
"SW19 6ED","SWIGGED"
"SW3 3PS","SWEEPS"
"CR4 2ES","CRAZES"
"N1 6EL","NIGEL"
"W1G 6LY","WIGGLY"
"E9 6ED","EGGED"
"N15 5AN","NISSAN"
"N1 9EL","NIGEL"
"E4 6LE","EAGLE"
"W1D 3ST","WIDEST"
"E4 9LE","EAGLE"
"N1 5AN","NISAN"
"E1 6HT","EIGHT"
"W1G 6LE","WIGGLE"
"DA9 9ER","DAGGER"
"DA1 5ES","DAISES"
"E6 6ED","EGGED"
"ME4 5LY","MEASLY"
"ME7 3RS","MEYERS"
"KA8 0BS","KABOBS"
"KA1 5ER","KAISER"
"G46 6LE","GAGGLE"
"G4 9ED","GAGED"
"G4 9ES","GAGES"
"G33 6AW","GEEGAW"
"CA8 1NS","CABINS"
"L39 3ND","LEGEND"
"PR1 2ED","PRIZED"
"PR1 2ES","PRIZES"
"PR4 1SE","PRAISE"
"PR1 3ST","PRIEST"
"BL0 0DY","BLOODY"
"BL3 3DS","BLEEDS"
"BL3 4TS","BLEATS"
"BL3 3PS","BLEEPS"
"BL0 0DS","BLOODS"
"M7 3RS","MYERS"
"CH1 5EL","CHISEL"
"L3 3DS","LEEDS"
"L4 5TS","LASTS"
"CH1 3FS","CHIEFS"
"WA6 9ED","WAGGED"
"WA6 6ED","WAGGED"
"L35 5ER","LESSER"
"ST4 1NS","STAINS"
"ST3 3DS","STEEDS"
"ST3 1NS","STEINS"
"ST3 3LS","STEELS"
"ST4 8LE","STABLE"
"ST4 6ES","STAGES"
"M4 1LS","MAILS"
"M15 5ED","MISSED"
"M34 6ER","MEAGER"
"M4 7AS","MAYAS"
"M1 6HT","MIGHT"
"DE5 3RT","DESERT"
"S4 8LE","SABLE"
"S1 2ER","SIZER"
"S12 2LE","SIZZLE"
"LE4 5ED","LEASED"
"LE4 5ES","LEASES"
"LE5 5ER","LESSER"
"GL4 5ER","GLASER"
"B45 5ES","BASSES"
"B14 5ED","BIASED"
"B34 6LE","BEAGLE"
"B4 7ED","BAYED"
"B4 7ER","BAYER"
"B16 9ER","BIGGER"
"B46 3LS","BAGELS"
"B3 3BE","BEEBE"
"B4 7ES","BAYES"
"B36 9ED","BEGGED"
"SA6 6ED","SAGGED"
"SA5 5ED","SASSED"
"TA6 6ED","TAGGED"
"BA5 1NG","BASING"
"BA2 4AR","BAZAAR"
"SP1 3LS","SPIELS"
"PO1 5ED","POISED"
"TR16 6ER","TRIGGER"
"PL3 4SE","PLEASE"
"PL3 4DS","PLEADS"
"PL4 7ED","PLAYED"
"PL1 4NT","PLIANT"
"PO5 3RS","POSERS"
"PO5 1ES","POSIES"
"HU8 8LE","HUBBLE"
"AL1 5SA","ALISSA"
"AL1 5HA","ALISHA"
"LU6 9ED","LUGGED"
"EN6 3LS","ENGELS"
"EN9 3LS","ENGELS"
"CO9 3NT","COGENT"
"CO4 5TS","COASTS"
"CO6 3NT","COGENT"
"W3 8ER","WEBER"
"TW3 3TS","TWEETS"
"TW19 6ED","TWIGGED"
"W12 2ES","WIZZES"
"HA9 9LE","HAGGLE"
"SE1 2ED","SEIZED"
"BR1 4RS","BRIARS"
"BR3 4ST","BREAST"
"SW3 3TS","SWEETS"
"BR3 4DS","BREADS"
"W4 1LS","WAILS"
"W4 5PS","WASPS"
"BR3 3DS","BREEDS"
"W4 1TS","WAITS"
"N4 1AD","NAIAD"
"N4 1LS","NAILS"
"N1 6HT","NIGHT"
"E4 9ER","EAGER"
"N1 9ER","NIGER"
"W1G 6ED","WIGGED"
"N3 3DS","NEEDS"
"W1S 3ST","WISEST"
"E4 6ER","EAGER"
"EN4 8LE","ENABLE"
"N3 3DY","NEEDY"
"E8 3RT","EBERT"
"ME4 6ER","MEAGER"
Postcodes and personalised number plates

Contact us