anglemx / mexico-postal-codes
PHP实用程序和数据库,用于查找墨西哥邮政编码信息
v1.0.1
2022-04-19 13:50 UTC
Requires
- php: >=7.2
- ext-bcmath: *
- ext-intl: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^7.5
README
PHP实用程序和数据库,用于查找墨西哥邮政编码信息
使用方法
$postalCode = PostalCode::fastLookup('64630'); printf('Postal Code: %s' . PHP_EOL, $postalCode->getPostalCode()); printf('State: %d %s %s' . PHP_EOL, $postalCode->getState(), $postalCode->getStateIso(), $postalCode->getStateName()); printf('Settlements:' . PHP_EOL); foreach ($postalCode->getSettlements() as $settlement) { printf('> %s %s' . PHP_EOL, $settlement->getId(), $settlement->getName()); printf(' Type: %s - %s' . PHP_EOL, $settlement->getType(), $settlement->getTypeName()); printf(' City: %s' . PHP_EOL, $settlement->getCity()); printf(' County: %s' . PHP_EOL, $settlement->getCounty()); printf(' Zone: %s - %s' . PHP_EOL, $settlement->getZone(), $settlement->getZoneName()); }
Postal Code: 64630
State: 19 NLE Nuevo León
Settlements:
> 330 Colinas de San Jerónimo
Type: 9 - Colonia
City: Monterrey
County: Monterrey
Zone: U - Urbano
> 331 San Jemo
Type: 9 - Colonia
City: Monterrey
County: Monterrey
Zone: U - Urbano
数据库来源
数据库是从墨西哥官方Correos de México网站下载的:https://www.correosdemexico.gob.mx/SSLServicios/ConsultaCP/CodigoPostal_Exportar.aspx,然后对其进行解析和处理以优化文件大小。
最后数据库更新时间:2022年1月2日
数据库由SEPOMEX(SErvicio POstal MEXicano)发布,包含免责声明,允许个人使用数据,但绝对不允许任何商业用途。使用此PHP库的任何人必须遵守此规定。
全国邮政编码目录由墨西哥邮政公司编制,免费提供给个人使用,不得全部或部分商业化,也不得在任何情况下向第三方分发。
数据库处理
要更新和自动生成,请将CPdescarga.txt
文件放在resources/
目录中,然后执行ProcessSepomexPostalCodeDatabase.php
脚本。
- CPdescargatxt.zip -> 2MB压缩文件
- CPdescarga.txt -> 14.6MB管道分隔文件
- mx-postal-codes.csv -> 6.94MB嵌套管道分隔文件
列定义可以在以下链接中找到:https://www.correosdemexico.gob.mx/SSLServicios/ConsultaCP/imagenes/Descrip.pdf
数据库分析
我们在AnalyticsSepomexPostalCodeDatabase.php
中包含了一个非常基本的骨架分析脚本,该脚本解析原始数据库并生成一些数据洞察。
2022年1月2日数据库的有趣事实
- 墨西哥有31,827个唯一的邮政编码
- 索诺拉州的卡耶梅市邮政编码85203有310个居住地登记在同一个邮政编码下。
测试
php vendor/bin/phpunit tests/PostalCodeLookupTest.php
待办事项
- 实现“数据库扩展”功能以减小库的安装大小。当前的邮政编码数据库文件大小为6.94MB,如果我们将其压缩,则可以减小到1.6MB。
- 邮政编码的“单个查找”方法在解析前非常快速地扫描文件。如果数据库文件按“流行度”排序,或者至少按“城市优先,农村次之”排序,则可以进行进一步优化。
参考
一些有趣的片段来自https://www.correosdemexico.gob.mx/DatosAbiertos/Normateca/SUS/LOG/LO7.pdf
- 前两位数字标识一个联邦实体,在墨西哥城的情况下是一个区。
- 第三位数字在联邦实体中标识一组市镇,一个市镇或市镇的一部分,在墨西哥城的情况下是区的一部分。
- 第四位数字在联邦实体和墨西哥城标识一组城市和农村聚居地。
- 第五位数字在联邦实体和墨西哥城标识一组城市和农村聚居地或一个城市和农村聚居地或一个邮政局。