Hierarchical Administrative Subdivision Codes
As one feature of "Administrative Subdivisions of Countries", I have defined a hierarchical set of
subdivision codes, called HASC codes. Be aware that these are not an official standard, sanctioned by
any international body. They are intended for internal use within a database or other computer system
and not for display.
Why did I feel the need to develop HASC codes, rather than using the existing FIPS or ISO standard?
I found those standards deficient in several ways:
- Most seriously, FIPS and ISO codes lag at least two years behind the real world, and usually more.
This seems to be because of bureaucratic mass.
- FIPS and ISO codes stop at the primary subdivision level; I wanted to have the ability to encode
secondary and lower subdivisions.
- FIPS codes are not mnemonic.
- ISO codes are not in a uniform format. They have variable length. They are mnemonic for some
countries, but not for others.
- ISO codes are not always unique. For example, Guadeloupe can be represented as either
- ISO codes represent the name of a division, not its territory. When a division changes its name,
the ISO code may also change. For example, when the name of Newfoundland was changed to Newfoundland
and Labrador, its ISO code changed from
CA-NL (a year later).
- For some countries, the ISO 3166-2 divisions occupy different levels in a hierarchy, and it can be
hard to understand which set of divisions to use. For example, the 2010-01-27 edition shows Spain
divided into 17 autonomous communities, 50 provinces, and 2 autonomous cities in North Africa. Each of
the provinces is part of an autonomous community, as shown by a column of cross-reference codes. If
you want to avoid overlap, you can use either the communities and the cities or the provinces and the
cities. I think the standard does a poor job of clarifying this choice, or of differentiating it from
cases where a country is divided into units of various types that don't overlap.
HASC codes (past, present, and future) observe the following rules:
- Each country has a unique two-letter code, which is the same as its ISO 3166-1 code. Each primary
subdivision of a country has a two-letter code that is unique within its country. Each secondary
subdivision of a country has a code that is unique within its primary division. Therefore, by
concatenating the codes, you can create a unique code for each subdivision listed. For example,
US.NY.DU represents Dutchess county (
DU), in New York state (
in the United States (
- I used existing official codes wherever possible. "Official" can mean various things, but I
favored ISO 3166-2 codes.
- The codes are mnemonic. They consist of the first letter in the subdivision name, followed by a
letter that occurs later in that name, unless it was impossible to assign unique codes by that rule.
- I intend to provide updates to these two-letter codes whenever geographical changes occur. I will
create a new code in each case where a subdivision's territorial extent changes, except for minor
boundary adjustments. I will avoid reusing obsolete codes for as long as possible.
- Primary divisions are exclusive and exhaustive within their country; secondary divisions are
exclusive and exhaustive within their primary division, and so on. "Exclusive" means that no two
divisions overlap; they have only boundary points in common, with an area of zero. "Exhaustive" means
that the set of subdivisions completely covers the area being subdivided. All of the counties of
Delaware, taken together, account for the entire territory of Delaware. If there are cases where the
official subdivisions don't meet these requirements, I will modify them as needed. For example,
Christians°, in Denmark, is technically not part of any subdivision of Denmark, but belongs directly
to the nation. I have artificially called it part of the same division as nearby Bornholm.