The ICAO codes are used by air traffic control and airline operations such as flight planning. They are not the same as the IATA codes encountered by the general public, which are used for airlinetimetables, reservations, and baggage handling. For example, travellers who use London's Heathrow Airport will most likely be familiar with its IATA code: LHR. The travelling public are less likely, however, to be familiar with the ICAO code: EGLL.
Unlike the IATA codes, the ICAO codes have a regional structure (they are broken up by 'sections' of the world), are not duplicated and are comprehensive. In general, the first letter is allocated by continent and represents a country or group of countries within that continent. The second letter generally represents a country within that region, and the remaining two are used to identify each airport. Using the earlier example as Heathrow airport, if one knows that the ICAO code for Heathrow is EGLL, then one can deduce that the airport EGNH is somewhere in the UK (it is Blackpool International Airport). On the other hand, knowing that the IATA code for Heathrow is LHR does not enable one to deduce the location of the airport LHV with any greater certainty (it is William T. Piper Memorial Airport in Pennsylvania in the United States). The exception to this rule is larger countries that have single-letter country codes, where the remaining three letters identify the airport.
In the contiguous United States and Canada, most, but not all, airports have been assigned three-letter IATA codes which are the same as their ICAO code without the leading K or C. e.g., YYC and CYYC (Calgary International Airport, Calgary, Alberta), IAD and KIAD (Dulles International Airport, Chantilly, Virginia). These codes are not to be confused with radio or television call signs, even though both countries use four-letter call signs starting with those letters. However, because Alaska, Hawaiʻi and other United States territories have their own 2-letter ICAO prefix, the situation there is similar to other smaller countries and the ICAO code of their airports is typically different from its corresponding 3-letter FAA/IATA identifier. For example, Hilo International Airport (PHTO vs ITO) and Juneau International Airport (PAJN vs JNU).
In region L (Southern Europe), all available 2-letter prefixes have been exhausted and thus no additional countries can be added.
ZZZZ is a special code which is used when no ICAO code exists for the airport and is normally used in Flight plans.