Skip to content

Instantly share code, notes, and snippets.

@jk
Last active August 29, 2015 14:06
Show Gist options
  • Save jk/a07ae059779c4de6910c to your computer and use it in GitHub Desktop.
Save jk/a07ae059779c4de6910c to your computer and use it in GitHub Desktop.
<?php
public class GermanPostalCodeToStateMap {
const STATE_BADEN_WUERTTEMBERG = 'Baden-Württemberg';
const STATE_BAYERN = 'Bayern';
const STATE_BERLIN = 'Berlin';
const STATE_BRANDENBURG = 'Brandenburg';
const STATE_BREMEN = 'Bremen';
const STATE_HAMBURG = 'Hamburg';
const STATE_HESSEN = 'Hessen';
const STATE_MECKLENBURG_VORPOMMERN = 'Mecklenburg-Vorpommern';
const STATE_NIEDERSACHSEN = 'Niedersachsen';
const STATE_SAARLAND = 'Saarland';
const STATE_SACHSEN = 'Sachsen';
const STATE_SACHSEN_ANHALT = 'Sachen-Anhalt';
const STATE_SCHLESWEIG_HOLSTEIN = 'Schleswig-Holstein';
const STATE_THUERINGEN = 'Thüringen';
/**
* @source http://www.cebus.ch/de/plz-bundesland.htm
* @var array Mapping of postal codes to state maps
*/
protected static $postalCodeToStateMap = [
['start' => 01001, 'end' => 01936, 'state' => 'Sachsen'],
['start' => 01941, 'end' => 01998, 'state' => 'Brandenburg'],
['start' => 02601, 'end' => 02999, 'state' => 'Sachsen'],
['start' => 03001, 'end' => 03253, 'state' => 'Brandenburg'],
['start' => 04001, 'end' => 04579, 'state' => 'Sachsen'],
['start' => 04581, 'end' => 04639, 'state' => 'Thüringen'],
['start' => 04641, 'end' => 04889, 'state' => 'Sachsen'],
['start' => 04891, 'end' => 04938, 'state' => 'Brandenburg'],
['start' => 06001, 'end' => 06548, 'state' => 'Sachsen-Anhalt'],
['start' => 06551, 'end' => 06578, 'state' => 'Thüringen'],
['start' => 06601, 'end' => 06928, 'state' => 'Sachsen-Anhalt'],
['start' => 07301, 'end' => 07919, 'state' => 'Thüringen'],
['start' => 07919, 'end' => 07919, 'state' => 'Sachsen'],
['start' => 07919, 'end' => 07919, 'state' => 'Thüringen'],
['start' => 07919, 'end' => 07919, 'state' => 'Sachsen'],
['start' => 07920, 'end' => 07950, 'state' => 'Thüringen'],
['start' => 07951, 'end' => 07951, 'state' => 'Sachsen'],
['start' => 07952, 'end' => 07952, 'state' => 'Thüringen'],
['start' => 07952, 'end' => 07952, 'state' => 'Sachsen'],
['start' => 07953, 'end' => 07980, 'state' => 'Thüringen'],
['start' => 07982, 'end' => 07982, 'state' => 'Sachsen'],
['start' => 07985, 'end' => 07985, 'state' => 'Thüringen'],
['start' => 07985, 'end' => 07985, 'state' => 'Sachsen'],
['start' => 07985, 'end' => 07989, 'state' => 'Thüringen'],
['start' => 08001, 'end' => 09669, 'state' => 'Sachsen'],
['start' => 10001, 'end' => 14330, 'state' => 'Berlin'],
['start' => 14401, 'end' => 14715, 'state' => 'Brandenburg'],
['start' => 14715, 'end' => 14715, 'state' => 'Sachsen-Anhalt'],
['start' => 14723, 'end' => 16949, 'state' => 'Brandenburg'],
['start' => 17001, 'end' => 17256, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17258, 'end' => 17258, 'state' => 'Brandenburg'],
['start' => 17258, 'end' => 17259, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17261, 'end' => 17291, 'state' => 'Brandenburg'],
['start' => 17301, 'end' => 17309, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17309, 'end' => 17309, 'state' => 'Brandenburg'],
['start' => 17309, 'end' => 17321, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17321, 'end' => 17321, 'state' => 'Brandenburg'],
['start' => 17321, 'end' => 17322, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17326, 'end' => 17326, 'state' => 'Brandenburg'],
['start' => 17328, 'end' => 17331, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17335, 'end' => 17335, 'state' => 'Brandenburg'],
['start' => 17335, 'end' => 17335, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 17337, 'end' => 17337, 'state' => 'Brandenburg'],
['start' => 17337, 'end' => 19260, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 19271, 'end' => 19273, 'state' => 'Niedersachsen'],
['start' => 19273, 'end' => 19273, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 19273, 'end' => 19306, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 19307, 'end' => 19357, 'state' => 'Brandenburg'],
['start' => 19357, 'end' => 19417, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 20001, 'end' => 21037, 'state' => 'Hamburg'],
['start' => 21039, 'end' => 21039, 'state' => 'Schleswig-Holstein'],
['start' => 21039, 'end' => 21170, 'state' => 'Hamburg'],
['start' => 21202, 'end' => 21449, 'state' => 'Niedersachsen'],
['start' => 21451, 'end' => 21521, 'state' => 'Schleswig-Holstein'],
['start' => 21522, 'end' => 21522, 'state' => 'Niedersachsen'],
['start' => 21524, 'end' => 21529, 'state' => 'Schleswig-Holstein'],
['start' => 21601, 'end' => 21789, 'state' => 'Niedersachsen'],
['start' => 22001, 'end' => 22113, 'state' => 'Hamburg'],
['start' => 22113, 'end' => 22113, 'state' => 'Schleswig-Holstein'],
['start' => 22115, 'end' => 22143, 'state' => 'Hamburg'],
['start' => 22145, 'end' => 22145, 'state' => 'Schleswig-Holstein'],
['start' => 22145, 'end' => 22145, 'state' => 'Hamburg'],
['start' => 22145, 'end' => 22145, 'state' => 'Schleswig-Holstein'],
['start' => 22147, 'end' => 22786, 'state' => 'Hamburg'],
['start' => 22801, 'end' => 23919, 'state' => 'Schleswig-Holstein'],
['start' => 23921, 'end' => 23999, 'state' => 'Mecklenburg-Vorpommern'],
['start' => 24001, 'end' => 25999, 'state' => 'Schleswig-Holstein'],
['start' => 26001, 'end' => 27478, 'state' => 'Niedersachsen'],
['start' => 27483, 'end' => 27498, 'state' => 'Schleswig-Holstein'],
['start' => 27499, 'end' => 27499, 'state' => 'Hamburg'],
['start' => 27501, 'end' => 27580, 'state' => 'Bremen'],
['start' => 27607, 'end' => 27809, 'state' => 'Niedersachsen'],
['start' => 28001, 'end' => 28779, 'state' => 'Bremen'],
['start' => 28784, 'end' => 29399, 'state' => 'Niedersachsen'],
['start' => 29401, 'end' => 29416, 'state' => 'Sachsen-Anhalt'],
['start' => 29431, 'end' => 31868, 'state' => 'Niedersachsen'],
['start' => 32001, 'end' => 33829, 'state' => 'Nordrhein-Westfalen'],
['start' => 34001, 'end' => 34329, 'state' => 'Hessen'],
['start' => 34331, 'end' => 34353, 'state' => 'Niedersachsen'],
['start' => 34355, 'end' => 34355, 'state' => 'Hessen'],
['start' => 34355, 'end' => 34355, 'state' => 'Niedersachsen'],
['start' => 34356, 'end' => 34399, 'state' => 'Hessen'],
['start' => 34401, 'end' => 34439, 'state' => 'Nordrhein-Westfalen'],
['start' => 34441, 'end' => 36399, 'state' => 'Hessen'],
['start' => 36401, 'end' => 36469, 'state' => 'Thüringen'],
['start' => 37001, 'end' => 37194, 'state' => 'Niedersachsen'],
['start' => 37194, 'end' => 37195, 'state' => 'Hessen'],
['start' => 37197, 'end' => 37199, 'state' => 'Niedersachsen'],
['start' => 37201, 'end' => 37299, 'state' => 'Hessen'],
['start' => 37301, 'end' => 37359, 'state' => 'Thüringen'],
['start' => 37401, 'end' => 37649, 'state' => 'Niedersachsen'],
['start' => 37651, 'end' => 37688, 'state' => 'Nordrhein-Westfalen'],
['start' => 37689, 'end' => 37691, 'state' => 'Niedersachsen'],
['start' => 37692, 'end' => 37696, 'state' => 'Nordrhein-Westfalen'],
['start' => 37697, 'end' => 38479, 'state' => 'Niedersachsen'],
['start' => 38481, 'end' => 38489, 'state' => 'Sachsen-Anhalt'],
['start' => 38501, 'end' => 38729, 'state' => 'Niedersachsen'],
['start' => 38801, 'end' => 39649, 'state' => 'Sachsen-Anhalt'],
['start' => 40001, 'end' => 48432, 'state' => 'Nordrhein-Westfalen'],
['start' => 48442, 'end' => 48465, 'state' => 'Niedersachsen'],
['start' => 48466, 'end' => 48477, 'state' => 'Nordrhein-Westfalen'],
['start' => 48478, 'end' => 48480, 'state' => 'Niedersachsen'],
['start' => 48481, 'end' => 48485, 'state' => 'Nordrhein-Westfalen'],
['start' => 48486, 'end' => 48488, 'state' => 'Niedersachsen'],
['start' => 48489, 'end' => 48496, 'state' => 'Nordrhein-Westfalen'],
['start' => 48497, 'end' => 48531, 'state' => 'Niedersachsen'],
['start' => 48541, 'end' => 48739, 'state' => 'Nordrhein-Westfalen'],
['start' => 49001, 'end' => 49459, 'state' => 'Niedersachsen'],
['start' => 49461, 'end' => 49549, 'state' => 'Nordrhein-Westfalen'],
['start' => 49551, 'end' => 49849, 'state' => 'Niedersachsen'],
['start' => 50101, 'end' => 51597, 'state' => 'Nordrhein-Westfalen'],
['start' => 51598, 'end' => 51598, 'state' => 'Rheinland-Pfalz'],
['start' => 51601, 'end' => 53359, 'state' => 'Nordrhein-Westfalen'],
['start' => 53401, 'end' => 53579, 'state' => 'Rheinland-Pfalz'],
['start' => 53581, 'end' => 53604, 'state' => 'Nordrhein-Westfalen'],
['start' => 53614, 'end' => 53619, 'state' => 'Rheinland-Pfalz'],
['start' => 53621, 'end' => 53949, 'state' => 'Nordrhein-Westfalen'],
['start' => 54181, 'end' => 55239, 'state' => 'Rheinland-Pfalz'],
['start' => 55240, 'end' => 55252, 'state' => 'Hessen'],
['start' => 55253, 'end' => 56869, 'state' => 'Rheinland-Pfalz'],
['start' => 57001, 'end' => 57489, 'state' => 'Nordrhein-Westfalen'],
['start' => 57501, 'end' => 57648, 'state' => 'Rheinland-Pfalz'],
['start' => 58001, 'end' => 59966, 'state' => 'Nordrhein-Westfalen'],
['start' => 59969, 'end' => 59969, 'state' => 'Hessen'],
['start' => 59969, 'end' => 59969, 'state' => 'Nordrhein-Westfalen'],
['start' => 60001, 'end' => 63699, 'state' => 'Hessen'],
['start' => 63701, 'end' => 63774, 'state' => 'Bayern'],
['start' => 63776, 'end' => 63776, 'state' => 'Hessen'],
['start' => 63776, 'end' => 63928, 'state' => 'Bayern'],
['start' => 63928, 'end' => 63928, 'state' => 'Baden-Württemberg'],
['start' => 63930, 'end' => 63939, 'state' => 'Bayern'],
['start' => 64201, 'end' => 64753, 'state' => 'Hessen'],
['start' => 64754, 'end' => 64754, 'state' => 'Baden-Württemberg'],
['start' => 64754, 'end' => 65326, 'state' => 'Hessen'],
['start' => 65326, 'end' => 65326, 'state' => 'Rheinland-Pfalz'],
['start' => 65327, 'end' => 65391, 'state' => 'Hessen'],
['start' => 65391, 'end' => 65391, 'state' => 'Rheinland-Pfalz'],
['start' => 65392, 'end' => 65556, 'state' => 'Hessen'],
['start' => 65558, 'end' => 65582, 'state' => 'Rheinland-Pfalz'],
['start' => 65583, 'end' => 65620, 'state' => 'Hessen'],
['start' => 65621, 'end' => 65626, 'state' => 'Rheinland-Pfalz'],
['start' => 65627, 'end' => 65627, 'state' => 'Hessen'],
['start' => 65629, 'end' => 65629, 'state' => 'Rheinland-Pfalz'],
['start' => 65701, 'end' => 65936, 'state' => 'Hessen'],
['start' => 66001, 'end' => 66459, 'state' => 'Saarland'],
['start' => 66461, 'end' => 66509, 'state' => 'Rheinland-Pfalz'],
['start' => 66511, 'end' => 66839, 'state' => 'Saarland'],
['start' => 66841, 'end' => 67829, 'state' => 'Rheinland-Pfalz'],
['start' => 68001, 'end' => 68312, 'state' => 'Baden-Württemberg'],
['start' => 68501, 'end' => 68519, 'state' => 'Hessen'],
['start' => 68520, 'end' => 68549, 'state' => 'Baden-Württemberg'],
['start' => 68601, 'end' => 68649, 'state' => 'Hessen'],
['start' => 68701, 'end' => 69234, 'state' => 'Baden-Württemberg'],
['start' => 69235, 'end' => 69239, 'state' => 'Hessen'],
['start' => 69240, 'end' => 69429, 'state' => 'Baden-Württemberg'],
['start' => 69430, 'end' => 69431, 'state' => 'Hessen'],
['start' => 69434, 'end' => 69434, 'state' => 'Baden-Württemberg'],
['start' => 69434, 'end' => 69434, 'state' => 'Hessen'],
['start' => 69435, 'end' => 69469, 'state' => 'Baden-Württemberg'],
['start' => 69479, 'end' => 69488, 'state' => 'Hessen'],
['start' => 69489, 'end' => 69502, 'state' => 'Baden-Württemberg'],
['start' => 69503, 'end' => 69509, 'state' => 'Hessen'],
['start' => 69510, 'end' => 69514, 'state' => 'Baden-Württemberg'],
['start' => 69515, 'end' => 69518, 'state' => 'Hessen'],
['start' => 70001, 'end' => 74592, 'state' => 'Baden-Württemberg'],
['start' => 74594, 'end' => 74594, 'state' => 'Bayern'],
['start' => 74594, 'end' => 76709, 'state' => 'Baden-Württemberg'],
['start' => 76711, 'end' => 76891, 'state' => 'Rheinland-Pfalz'],
['start' => 77601, 'end' => 79879, 'state' => 'Baden-Württemberg'],
['start' => 80001, 'end' => 87490, 'state' => 'Bayern'],
['start' => 87491, 'end' => 87491, 'state' => 'Außerhalb der BRD'],
['start' => 87493, 'end' => 87561, 'state' => 'Bayern'],
['start' => 87567, 'end' => 87569, 'state' => 'Außerhalb der BRD'],
['start' => 87571, 'end' => 87789, 'state' => 'Bayern'],
['start' => 88001, 'end' => 88099, 'state' => 'Baden-Württemberg'],
['start' => 88101, 'end' => 88146, 'state' => 'Bayern'],
['start' => 88147, 'end' => 88147, 'state' => 'Baden-Württemberg'],
['start' => 88147, 'end' => 88179, 'state' => 'Bayern'],
['start' => 88181, 'end' => 89079, 'state' => 'Baden-Württemberg'],
['start' => 89081, 'end' => 89081, 'state' => 'Bayern'],
['start' => 89081, 'end' => 89085, 'state' => 'Baden-Württemberg'],
['start' => 89087, 'end' => 89087, 'state' => 'Bayern'],
['start' => 89090, 'end' => 89198, 'state' => 'Baden-Württemberg'],
['start' => 89201, 'end' => 89449, 'state' => 'Bayern'],
['start' => 89501, 'end' => 89619, 'state' => 'Baden-Württemberg'],
['start' => 90001, 'end' => 96489, 'state' => 'Bayern'],
['start' => 96501, 'end' => 96529, 'state' => 'Thüringen'],
['start' => 97001, 'end' => 97859, 'state' => 'Bayern'],
['start' => 97861, 'end' => 97877, 'state' => 'Baden-Württemberg'],
['start' => 97888, 'end' => 97892, 'state' => 'Bayern'],
['start' => 97893, 'end' => 97896, 'state' => 'Baden-Württemberg'],
['start' => 97896, 'end' => 97896, 'state' => 'Bayern'],
['start' => 97897, 'end' => 97900, 'state' => 'Baden-Württemberg'],
['start' => 97901, 'end' => 97909, 'state' => 'Bayern'],
['start' => 97911, 'end' => 97999, 'state' => 'Baden-Württemberg'],
['start' => 98501, 'end' => 99998, 'state' => 'Thüringen']
];
/**
* Get the german state for a given postal code
*
* @param $postalCode int Postal code
* @return string|null If there is a distinct state, the state name is returned, otherwise (more than one state maps to the postal code) false is returned
*/
public static function postalCodeToState($postalCode) {
foreach(self::$postalCodeToStateMap as $mapEntry) {
if($postalCode >= $mapEntry['start'] && $postalCode <= $mapEntry['end']) {
return $mapEntry['state'];
}
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment