There’s a particular kind of small thrill in hearing a station announcement roll off a platform PA system — “the train arriving on platform three is the Howrah–Mumbai Mail, HWH to CSMT” — and actually knowing what those letters mean before the announcer finishes the sentence. I picked up most of my station codes the unglamorous way, standing on platforms waiting for delayed trains, squinting at the reservation chart pasted outside the S3 coach to see if my name had made it off the waitlist. Somewhere in all those hours, NDLS, HWH, MAS, and SBC stopped being abstract letters and started being places I could picture.
Indian Railways runs one of the largest rail networks on earth — over 13,000 stations, carrying a station code system that’s existed, in some form, since the colonial-era telegraph days when a short code saved real time and real money on wire transmissions. Here’s the full breakdown: how the codes work, why a few of the most famous ones changed in living memory, and a state-by-state list of the stations you’re most likely to actually book a ticket for.
How Station Codes Are Actually Formed
Most Indian Railway station codes are a straightforward abbreviation of the station’s name — usually two to five capital letters, built from the first letters or a recognisable contraction of the full name. Agra Cantonment becomes AGC. Chandigarh becomes CDG. Where two stations risk sharing a code, or where the name is short enough not to need shortening at all, Indian Railways has periodically renamed the code to just spell out the station: Pune’s old two-letter code became the plain word PUNE, and the same thing happened with Gaya (GYA to GAYA), Puri (PUI to PURI), and Kota (KTT to KOTA).
A handful of India’s most iconic codes have changed within recent memory, usually to reflect a renamed station rather than a renamed code system. Mumbai’s Victoria Terminus became Chhatrapati Shivaji Terminus (CSTM) and then, in 2017, Chhatrapati Shivaji Maharaj Terminus — CSMT, the code most travellers use today, though the older BCT code for Mumbai Central is still very much in daily use. Kurla Terminus’s old code, CLAT, became LTT after the station was renamed Lokmanya Tilak Terminus. And Allahabad Junction’s long-standing ALD became PRYJ in 2020, after the city itself was renamed Prayagraj.
Master Table: Key Railway Station Codes by State
| State / UT | Major City | Station Name | Code |
|---|---|---|---|
| Andhra Pradesh | Visakhapatnam | Visakhapatnam Junction | VSKP |
| Arunachal Pradesh | Naharlagun (nearest to Itanagar) | Naharlagun | NHLN |
| Assam | Guwahati | Guwahati | GHY |
| Bihar | Patna | Patna Junction | PNBE |
| Chhattisgarh | Raipur | Raipur Junction | R |
| Goa | Madgaon | Madgaon Junction | MAO |
| Gujarat | Ahmedabad | Ahmedabad Junction | ADI |
| Haryana | Gurugram | Gurgaon | GGN |
| Himachal Pradesh | Shimla | Shimla | SML |
| Jharkhand | Ranchi | Ranchi Junction | RNC |
| Karnataka | Bengaluru | KSR Bengaluru City Junction | SBC |
| Kerala | Thiruvananthapuram | Thiruvananthapuram Central | TVC |
| Madhya Pradesh | Bhopal | Bhopal Junction | BPL |
| Maharashtra | Mumbai | Chhatrapati Shivaji Maharaj Terminus | CSMT |
| Manipur | Imphal (nearest rail) | Jiribam | JRB |
| Meghalaya | Shillong (nearest rail) | Guwahati | GHY |
| Mizoram | Aizawl (nearest rail) | Bairabi | BAI |
| Nagaland | Dimapur | Dimapur | DMV |
| Odisha | Bhubaneswar | Bhubaneswar | BBS |
| Punjab | Amritsar | Amritsar Junction | ASR |
| Rajasthan | Jaipur | Jaipur Junction | JP |
| Sikkim | Gangtok (nearest rail) | New Jalpaiguri | NJP |
| Tamil Nadu | Chennai | Chennai Central | MAS |
| Telangana | Hyderabad | Secunderabad Junction | SC |
| Tripura | Agartala | Agartala | AGTL |
| Uttar Pradesh | Lucknow | Lucknow Charbagh (NR) | LKO |
| Uttarakhand | Dehradun | Dehradun | DDN |
| West Bengal | Kolkata | Howrah Junction | HWH |
| Delhi (UT) | New Delhi | New Delhi | NDLS |
| Jammu & Kashmir (UT) | Jammu | Jammu Tawi | JAT |
| Puducherry (UT) | Puducherry | Puducherry | PDY |
A few states — Manipur, Meghalaya, Mizoram, Sikkim — still don’t have a major broad-gauge station within their own capital city, so the nearest functioning railhead is listed instead. Ladakh, Lakshadweep, and Andaman & Nicobar have no rail connectivity at all.
The North: Delhi’s Web of Terminals
Delhi alone runs multiple major terminals rather than one central station, which trips up a lot of first-time bookers.
| Station | Code |
|---|---|
| New Delhi | NDLS |
| Old Delhi (Delhi Junction) | DLI |
| Hazrat Nizamuddin | NZM |
| Anand Vihar Terminal | ANVT |
| Delhi Sarai Rohilla | DEE |
| Chandigarh | CDG |
| Amritsar Junction | ASR |
| Jammu Tawi | JAT |
If you’re booking a long-distance train out of Delhi, it genuinely matters which of these five stations your train departs from — they’re spread across the city, and NDLS to ANVT alone can be a forty-five-minute drive in traffic.
The West: Mumbai’s Two Central Stations, and Beyond
Mumbai’s own station-code confusion is legendary even among Indians — the city has two stations that both go by some version of “Central.”
| Station | Code |
|---|---|
| Chhatrapati Shivaji Maharaj Terminus | CSMT |
| Mumbai Central | BCT |
| Lokmanya Tilak Terminus | LTT |
| Dadar | DR |
| Pune Junction | PUNE |
| Ahmedabad Junction | ADI |
| Vadodara Junction | BRC |
| Surat | ST |
BCT stands for “Bombay Central Terminus,” a leftover from the city’s old name — the code never changed even after the city officially became Mumbai, which is a small, quiet piece of railway trivia that outlasted an entire renaming movement.
The South: A Region That Renamed Its Own Cities Mid-Code
South India has had its own share of station-name changes tracking city renames — Madras to Chennai, Bangalore to Bengaluru, Trivandrum to Thiruvananthapuram — though interestingly, most of the station codes themselves stayed exactly as they were.
| Station | Code |
|---|---|
| Chennai Central | MAS |
| Chennai Egmore | MS |
| KSR Bengaluru City Junction | SBC |
| Secunderabad Junction | SC |
| Hyderabad Deccan | HYB |
| Ernakulam Junction | ERS |
| Thiruvananthapuram Central | TVC |
| Coimbatore Junction | CBE |
| Madurai Junction | MDU |
| Mangaluru Central | MAQ |
MAS for Chennai Central is the one that trips up the most people — the station has kept the code from Madras long after the city’s name changed, purely because MAS was already so deeply embedded across the reservation and freight systems that changing it wasn’t worth the disruption.
The East and Northeast: A Smaller, Tighter Network
Outside West Bengal’s dense rail grid, the northeastern network is comparatively sparse, and several state capitals in this region still rely on a railhead outside their own borders.
| Station | Code |
|---|---|
| Howrah Junction | HWH |
| Sealdah | SDAH |
| Patna Junction | PNBE |
| Ranchi Junction | RNC |
| Bhubaneswar | BBS |
| Guwahati | GHY |
| New Jalpaiguri | NJP |
| Agartala | AGTL |
| Dimapur | DMV |
New Jalpaiguri, NJP, does more work than its modest size suggests — it’s the effective gateway station for the entire eastern Himalayan belt, from Darjeeling and Sikkim to parts of North Bengal, and most travellers heading up into those hills will pass through it whether they realise it or not.
Central India: Junctions That Hold the Country Together
Madhya Pradesh’s rail geography puts it almost literally at the crossroads of the country, which is why so many north-south and east-west trains change crews or reverse direction through its junctions.
| Station | Code |
|---|---|
| Bhopal Junction | BPL |
| Jabalpur | JBP |
| Indore Junction | INDB |
| Gwalior | GWL |
| Ratlam Junction | RTM |
| Raipur Junction | R |
| Durg | DURG |
Raipur’s single-letter code, R, is one of the rarer quirks in the whole system — most codes run to at least two or three letters, and there are only a small handful of stations across the country that get away with just one.
Why Knowing These Actually Helps
Beyond the trivia, station codes genuinely change how efficiently you can use IRCTC or the enquiry counters — searching by code rather than city name avoids the ambiguity of a city with multiple stations (Mumbai, Delhi, and Hyderabad all being prime examples), and it’s the fastest way to read a PNR, a reservation chart, or a running train’s route without second-guessing which of a city’s stations you’re actually looking at. For a network this size, moving more than eight billion passenger journeys a year, a short, unambiguous code is doing a lot more quiet, unglamorous work than it gets credit for.
