One station, five different codes
King's Cross is KGX, KNGX, 54311 and 612100, and that is before the international schemes. None of these is redundant. Each was invented by a different system that needed to answer a different question, and all of them are still in daily use.
Anyone reading rail data for the first time hits this quickly: the same station appears under several unrelated identifiers, and no single one of them works everywhere. Our station directory shows all of them together for exactly that reason. Here is what each is for.
The five identifiers
CRS — three letters, e.g. KGX
The passenger-facing code. It is what appears on tickets, departure screens and journey planners, and it is the only one of the five most travellers ever see. Roughly 2,600 stations have one. If a place has no CRS, the public is not expected to go there.
TIPLOC — up to seven letters, e.g. KNGX
“Timing Point Location”. This is the timetable's own identifier, and it exists for anywhere a train's time is recorded — which is far more places than there are stations. Junctions, signals, loops and yards all have one. It is the code the schedule actually speaks.
STANOX — five digits, e.g. 54311
A geographic code, grouped by area, used by the operational systems that track trains.
Its grouping is spatial: nearby locations have nearby numbers, and the blocks belong to
places rather than to operators — 73000 is Paddington, 73003 is the Elizabeth line platforms underneath it. This is the code that signalling berths
resolve to, which makes it the hinge between a berth step and a dot on the map.
NLC — the settlement code
“National Location Code”, used by the systems that move money — apportioning ticket revenue between operators. It exists because the question “who gets paid for this journey” is not the same question as “where is this train”.
UIC — the international code
The identifier used for cross-border services and international reference data, under the union of European railways' numbering. Mostly of interest if you are joining British data to continental data.
Worth a warning if you go looking for it: the field labelled UIC in CORPUS,
the industry's own reference file, holds a five-digit national value rather than the
seven-digit international one, so the two are not interchangeable and a join on the
wrong one silently matches nothing. We report what CORPUS carries, because that is what
the file says — not because it is the code the name implies.
Why five, and why none of them won
The temptation is to assume this is historical mess that ought to be cleaned up. It is history, but the codes are not interchangeable, and the reason is that they carve the world up differently.
A single CRS can cover several TIPLOCs. A large station where the through platforms and the terminating platforms are separately timed has more than one timing point behind one public code — which is why our station lookup lists every TIPLOC behind a CRS rather than pretending there is one. Conversely, thousands of TIPLOCs have no CRS at all, because they are not places a passenger can go.
The scale of that gap is worth stating plainly. The industry's location reference we load holds about 55,900 records. Roughly 2,600 of them are stations. The overwhelming majority of the railway's named places are operational.
What this means when you search
It has a direct and slightly startling consequence: searching a place name returns signals.
Eleven locations in the timetable match the word “Corby”. Ten of them are signals, loops and junctions — including one called “Corby Signal Km3974”, which a freight train is timed past at 07:47. That is a real entry in a real timetable, and it is not a train anybody can catch.
So when you search for a train by place, we restrict the match to actual stations. When you search the station directory itself there is a separate non-stations view, because if you are looking up a junction you should be able to find it. Two different questions, two different answers, rather than one search that half-serves both.
A stop is not the same as a call
A related distinction catches people reading schedules for the first time. A train's schedule lists every timing point along its route, and it passes most of them. In a typical extract, 44% of all timing points are passing points — the train is timed through them without stopping.
A passing point carries no public time, because there is nothing for a passenger to do with it. When this site says a train “calls at” somewhere, it means a real call with a public time. This also matters for cancellations: a passing point inherits the cancellation flag from the run, so treating passing points as calls would have the site announcing that every junction along a route had been cancelled.
Which code should you use?
- Talking to a passenger, or building a journey planner: CRS. It is the only one anyone recognises.
- Reading or joining timetable data: TIPLOC. It is what schedules are written in, and it covers places CRS cannot express.
- Working with live movements or signalling: STANOX, since that is what the operational feeds and berth mappings resolve to.
- Anything to do with fares or revenue: NLC — though note that this site is not a ticket retailer and holds no fares data.
Our station lookup will translate between all of them: give it any code or a name and it returns the rest, along with the operator, facilities and the line references and mileages the place sits at.
Where this comes from
The location reference is Network Rail's CORPUS dataset; station details come from National Rail's KnowledgeBase; mileages come from the engineering exports. All are listed with their licences on where the data comes from. The FAQ has one-line definitions if that is all you need, and the guide to line references covers how the industry identifies the track between these places.