Maxmind 的 GeoLite2 Continent 代码

Maxmind's GeoLite2 Continent code

我正在使用 MaxMind 的免费 GeoLite2 database
根据他们code,我可以得到国家的ISO编码。
print($record->country->isoCode . "\n"); // 'US'
但是我如何获得大陆代码? 我更具体地寻找欧盟检测。

欧盟

EU(欧盟)国家列表为:

  • 奥地利,奥地利
  • 比利时,比利时
  • BG,保加利亚
  • CR,克罗地亚
  • 塞浦路斯共和国 CY
  • 捷克共和国
  • DK,丹麦
  • EE,爱沙尼亚
  • FI,芬兰
  • 法国,法国
  • 德国,德国
  • GR,希腊
  • HU,匈牙利
  • IE,爱尔兰
  • IT,意大利
  • LV,拉脱维亚
  • LI,立陶宛
  • LU,卢森堡
  • MT,马耳他
  • NL,荷兰
  • PL,波兰
  • 葡萄牙,葡萄牙
  • RO,罗马尼亚
  • SK,斯洛伐克
  • SI,斯洛文尼亚
  • SP,西班牙
  • SE,瑞典
  • 英国,英国

我使用的示例:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eu=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB');
if (in_array($cc,$eu)) {
   //inside EU
} else {
   //outside EU
}

欧洲经济区

根据您要执行的操作(考虑到这是在 GDPR 生效后提出的要求),您可能想要测试 EEA(欧洲经济区)。

欧洲经济区是:

  • 所有欧盟成员国
  • 不,挪威
  • IS,冰岛
  • LI,列支敦士登

这是我使用的完整geoip:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eea=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB', 'NO', 'IS', 'LI');
if (in_array($cc,$eea)) {
   //inside EEA
} else {
   //outside EEA
}

特例

您需要处理一些特殊情况,这些情况取决于您的预期用途是否包括在内:

欧盟的一部分,但有自己的 ISO 2 字母代码

  • GI,直布罗陀(~英国)
  • AX,奥兰群岛(~芬兰)

请注意还有更多这些,但它们没有自己的 ISO 国家/地区代码...

欧盟和欧洲经济区的这些部分,有自己的 2 个字母的国家/地区代码。

最外围地区

  • GF,法属圭亚那(~法国)
  • GP,瓜德罗普岛(~法国)
  • MQ,马提尼克岛(~法国)
  • YT,马约特岛(~法国)
  • RE, 留尼旺 (~法国)
  • MF,圣马丁(~法国)

这些变得很复杂,你真的应该仔细阅读每一个你寻求定义欧盟的具体原因,无论它们是在还是在外面。另请注意,这些有时会在没有太多媒体报道的情况下发生变化。

海外国家和地区

还有更多这些,但对于大多数用例而言,它们不应被视为欧盟的一部分,如果您有特定原因,请务必查看它们。

飞地

这些往往没有自己的国家代码,但有时出于某些目的,它们可能会应用不同的规则。

示例是例如的独立部分德国或西班牙,但位于内部,例如瑞士或摩洛哥。

欧洲自由贸易区

为了完整起见:瑞士 (CH) 既不是欧盟成员,也不是欧洲经济区成员,但它是 EFTA(欧洲自由贸易联盟)的成员。

微州

列支敦士登是欧洲经济区的成员,但还有一些国家既不属于欧盟也不属于欧洲经济区。尽管如此,出于实际原因,他们确实有各种关系 与欧盟(例如成为欧元区的一部分、在申根区内、征收增值税等)

  • 公元,安道尔
  • LI,列支敦士登
  • MC,摩纳哥
  • SM,圣马力诺
  • VC,梵蒂冈城

大陆

如果您确实要寻找大陆,则需要添加更多的国家/地区,并且您将不得不处理不仅仅在欧洲的国家/地区(例如土耳其、俄罗斯)。

Maxmind 的 "EU" 国家代码

当 Maxmind 无法确定它实际是哪个国家时,有时会使用国家代码 "EU"。 "EU"指的是欧洲,而不是欧盟(实际上保留了欧盟国家代码)。

更多信息:

https://en.wikipedia.org/wiki/Special_member_state_territories_and_the_European_Union https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 https://en.wikipedia.org/wiki/Microstates_and_the_European_Union https://dev.maxmind.com/faq/what-are-the-eu-europe-and-ap-asia-pacific-entries/

如果您只是想查询该国家/地区是否是欧盟成员国,MaxMind provides this:

$record->country->isInEuropeanUnion

如果您想要 continent code,您可以通过以下方式获得:

$record->continent->code

但是,请注意并非所有欧洲国家都是欧盟的一部分。