Why Do Airport Codes Look So Strange?

Three-letter airport codes look random because they preserve history: old city names, vanished airfields, weather-station identifiers and radio rules from the 1930s.

· 8 min read
Close-up of a green and white airline baggage tag printed with the large airport code ARN for Stockholm Arlanda
A baggage tag for Stockholm Arlanda, whose code ARN is printed bigger than the city name. Photo: Tony Webster / Wikimedia Commons, CC BY 2.0

Airport codes look strange because most of them are fossils: they preserve old city names, long-gone airfields, 1930s weather-station identifiers and radio rules that have nothing to do with the airport you see today. Mumbai is still BOM because the city was Bombay when the code was set, Chicago O'Hare is ORD because it began as Orchard Field, and Toronto is YYZ because Canadian codes grew out of a "Y for yes" weather-station system.

Once you know the handful of rules behind them, the codes on your boarding pass stop looking random and start reading like a compressed history of aviation.

Who hands out the three letters?

The three-letter codes printed on tickets, departure boards and baggage tags are IATA location identifiers, assigned by the International Air Transport Association, the trade body of the world's airlines. Three letters give 26 × 26 × 26 = 17,576 possible combinations, which sounds like plenty until you remember that every commercial airport, many cities and a number of rail and bus stations sold on airline tickets all need one.

Pilots and air traffic controllers use a different set: four-letter ICAO codes from the International Civil Aviation Organization, the UN agency for aviation. Those are organised by geography. US airports mostly start with K (KJFK, KLAX), Canadian ones with C (CYYZ), British ones with EG (EGLL is Heathrow) and Australian ones with Y (YSSY is Sydney).

India sits in the V region, shared with neighbours across South and South-East Asia. Inside India, the second letter tells you which flight information region the airport falls under: VA for the Mumbai region, VE for Kolkata, VI for Delhi and VO for Chennai. So Delhi's Indira Gandhi International is VIDP (the P is for Palam, the original airfield), Mumbai is VABB, Kolkata is VECC and Chennai is VOMM. Those flight plans increasingly rely on satellite positioning, a story we tell in how GPS knows where you are.

The 1930s: two letters, then an X

According to IATA's own fact sheet, airport coding began in the 1930s, when airlines mostly chose their own two-letter codes. In the United States, pilots borrowed the two-letter identifiers of the National Weather Service. That gave only 676 combinations, and plenty of towns with new airfields had no weather code at all.

By the late 1940s the industry had moved to three letters. The easiest fix for an airport that already had a two-letter code was to add an X. Los Angeles was simply "LA" until it became LAX in 1947, and Portland (PDX) and Phoenix (PHX) followed the same pattern. The X in Phoenix is a coincidence; it was tacked on, not taken from the spelling. Standardising the system properly came later, when the airlines asked IATA to run the process in the 1960s.

Banned first letters and "irregular" codes

Some American codes look odd because whole letters were off limits. The US Navy reserved codes beginning with N, and the radio regulator avoided K and W, which begin American broadcast call signs. Cities whose names start with those letters had to improvise:

  • Nashville became BNA, from its original airport, Berry Field.
  • Newark became EWR and Norfolk became ORF.
  • Kansas City became MCI, after Mid-Continent International.
  • Key West became EYW, and Wilmington, North Carolina, became ILM.

Other codes remember what used to stand on the site. New Orleans is MSY after the Moisant Stock Yards, Orlando is MCO after McCoy Air Force Base, and Chicago O'Hare is ORD after Orchard Field, the airport's name before it was renamed in honour of naval aviator Edward "Butch" O'Hare. The rules can also produce unfortunate results. Sioux City, Iowa, ended up with SUX by the same add-a-letter logic, and the local airport has leaned into it with a sense of humour rather than fight it.

Why almost every Canadian code starts with Y

Canada's pattern is the most famous puzzle of all: YVR (Vancouver), YYC (Calgary), YUL (Montreal), YOW (Ottawa) and YYZ (Toronto). The explanation goes back to the same pre-war era. Canada identified its weather and radio reporting stations with two letters, and a prefix showed whether a station shared a site with an airport: Y for "yes", W for "without".

When international three-letter codes arrived, Canadian airports kept that Y. Toronto Pearson sits on the site of the old Malton airport, which opened in the late 1930s, and Malton's two-letter identifier was YZ. Add the Y prefix and you get YYZ, a code so beloved that the rock band Rush named an instrumental after it. IATA itself describes the convention as a historical habit that is "no longer automatically observed", but the Y has survived on almost every major Canadian airport.

Large departures board under a curved white ceiling at Calgary International Airport, with the airport code YYC shown in the corner
The departures hall at Calgary, YYC, one of the many Canadian airports whose code begins with the old "Y for yes" weather-station prefix. Photo: Silver Dovelet / Wikimedia Commons, CC BY-SA 4.0

India's codes: a map of old names

Indian airport codes are a quick lesson in the country's changing place names, because a code almost never changes when a city does.

  • BOM for Mumbai, renamed from Bombay in 1995.
  • MAA for Chennai, which was Madras until 1996.
  • CCU for Kolkata, which was Calcutta until 2001.
  • COK for Kochi (Cochin), TRV for Thiruvananthapuram (Trivandrum) and CCJ for Kozhikode (Calicut).

The same thing happens abroad: Beijing Capital is still PEK, from the old romanisation Peking.

India also has a distinctive block of codes beginning with IX: IXC for Chandigarh, IXB for Bagdogra, IXE for Mangaluru, IXJ for Jammu, IXL for Leh, IXM for Madurai, IXR for Ranchi and IXZ for Port Blair. If you see a code starting with IX on a ticket, you are almost certainly flying within India.

Long, bright departure lounge at Mumbai airport's Terminal 1C, with arched white ceiling beams, potted plants and rows of seats
The domestic departure lounge at Mumbai's Terminal 1C. The city has been Mumbai since 1995, but its airport code is still BOM, for Bombay. Photo: Prateek Karandikar / Wikimedia Commons, CC BY-SA 4.0

When a city gets a new airport

Codes are sticky because changing one is expensive and risky. Every reservation system, fare filing, baggage-sorting machine and printed timetable depends on them. IATA's fact sheet notes that codes are considered permanent and are almost never altered; its classic exception is Washington Dulles, which switched from DIA to IAD because DIA was too easily confused with Washington National (DCA).

So when a city replaces its airport, the code usually moves with the airline traffic. India did exactly that in 2008. When Hyderabad's Rajiv Gandhi International Airport at Shamshabad opened on 23 March 2008, the code HYD was transferred to it from Begumpet. Two months later, on 24 May 2008, BLR moved from Bengaluru's HAL airport to the new airport at Devanahalli, now Kempegowda International. The four-letter ICAO codes, by contrast, stayed with the old airfields, and the new airports received fresh ones (VOHS for Hyderabad and VOBL for Bengaluru).

When a city adds a second airport instead, it needs a second code, and that is where travellers need to pay attention. Goa now has GOI (Dabolim, in the south) and GOX (Manohar International at Mopa, in the north), which are far enough apart to change your taxi plans. Navi Mumbai International Airport, which began commercial flights on 25 December 2025, is NMI, separate from BOM. In the north, the Noida International Airport at Jewar has been assigned DXN, distinct from Delhi's DEL.

The code is the label your suitcase reads

The three letters matter most to your luggage. A baggage tag is built around the destination code, printed far larger than the city name, because handlers and sorting systems route bags by it. A slip of one letter can send a suitcase to the wrong continent, which is why it is worth glancing at the tag before your bag disappears down the belt.

Your boarding pass carries the same codes inside its barcode, under an IATA standard for bar-coded boarding passes that is now usually printed as a 2D symbol on paper or shown on a phone. The square-code side of that story, including how a Japanese factory barcode reached boarding gates and payment counters, is told in the history of the QR code.

How to use codes like a frequent flyer

A few habits turn airport codes from trivia into a travel skill:

  1. Search by city code where one exists. Several big cities have a metropolitan code that covers all their airports: LON for London (Heathrow LHR, Gatwick LGW, Stansted STN, Luton LTN and City LCY), NYC for New York and TYO for Tokyo. Searching the city code shows every option at once.
  2. Check the code, not just the city name. In India this now matters at Mumbai (BOM or NMI) and Goa (GOI or GOX). Confirm which one is on the ticket before booking a cab.
  3. Know your connections. Tokyo's Haneda (HND) and Narita (NRT) are an hour or more apart, and many travellers between Tokyo and Osaka skip the plane entirely, for reasons we explain in 60 years of the Shinkansen.
  4. Read the tag at check-in. It takes two seconds and is the cheapest insurance against lost luggage.

Small letters, long memories

Airport codes were never designed as a clean, logical system. They grew out of whatever pilots and airlines were already using in the 1930s, then froze in place because so much depended on them. That is exactly what makes them fun: BOM still remembers Bombay, ORD still remembers an orchard outside Chicago, and YYZ still remembers a weather station in a farming village called Malton. Next time you check a bag, look at those three letters. They are a tiny piece of history travelling with you.