reducktion / socrates
一个用于验证和从国家身份证号码中提取公民信息的包。
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^9.0
- roave/security-advisories: dev-master
README
简介
我是一个世界公民,我的国籍是善意。
Socrates是一个PHP包,允许您验证和从国家身份证号码中检索个人信息。支持大多数欧洲国家,以及一些北美和南美国家,目标是支持世界上尽可能多的国家。
一些国家还使用个人信息的编码,如性别或出生地。此包允许您以一致的方式提取这些信息。
此包可用于许多事情,例如验证用户ID用于与金融相关的应用程序或验证用户的年龄而无需明确询问。我们建议您在存储任何信息之前,审查您所在国家的数据处理和保护法律。
此包的其他语言版本正在开发中。请向下查看目前可用版本。
PHP版本
PHP 8.1是最低要求版本。如果您使用的是较旧版本,则应拉取此包的1.3.0版本。我们强烈建议您升级!
安装
composer require reducktion/socrates
用法
Socrates提供两种方法:validateId
和getCitizenDataFromId
。两个方法都接收一个ID和一个国家代码,分别作为枚举的参数,枚举值遵循ISO 3166-2格式。只需实例化类并调用您希望的方法
use Reducktion\Socrates\Socrates; use Reducktion\Socrates\Constants\Country; $socrates = new Socrates(); $socrates->validateId('14349483 0 ZV3', Country::Portugal);
validateId
此方法将返回true或false。如果ID的字符长度不正确,将抛出InvalidLengthException
。
if ($socrates->validateId('719102091', Country::Netherlands)) { echo 'Valid ID.'; } else { echo 'Invalid ID.'; }
getCitizenDataFromId
此方法将返回一个Citizen
实例。
如果ID无效,将抛出InvalidIdException
。
如果国家不支持数据提取,将抛出UnsupportedOperationException
。
$citizen = $socrates->getCitizenDataFromId('3860123012', Country::Estonia);
Citizen
类以一致格式存储所有国家提取的公民数据。
它公开了getGender()
、getDateOfBirth()
、getAge()
和getPlaceOfBirth()
方法。
getGender
将返回一个Gender
枚举实例。
getPlaceOfBirth
将返回一个城市或地区的名称,作为string
。
getAge
返回公民的年龄,作为int
。
getDateOfBirth
返回一个DateTime
实例。
使用上面的示例,爱沙尼亚只在其ID中编码公民的出生日期和性别。因此,上述方法将返回
echo $citizen->getGender(); // 'Gender::Male' echo $citizen->getDateOfBirth(); // DateTime instance with the date '1986-01-23' echo $citizen->getAge(); // (The current age as a number) echo $citizen->getPlaceOfBirth(); // null - Estonia does not encode place of birth on its ID numbers
支持和不支持的国家
在这里您可以查看支持的国家完整列表以及它们是否支持数据提取[链接]。
目前有四个欧洲国家不支持:奥地利 🇦🇹、白俄罗斯 🇧🇾、塞浦路斯 🇨🇾和卢森堡 🇱🇺。美洲也有一些国家不支持。这是因为我们无法找到可靠的算法来源,如果有的话。我们很乐意帮助这些国家得到支持。
测试
composer test
端口
本包也支持以下语言
贡献
您在算法中发现了任何问题吗?您知道如何实现我们遗漏的国家吗?您认为代码库应该进行哪些改进?任何帮助都备受欢迎!请查看我们的贡献指南。
行为准则
我们的行为准则基于Ruby的。请查看我们的行为准则。
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。
鸣谢
Socrates是由Alexandre Olival和João Cruz用💖制作的。我们是Reducktion。我们希望通过编译、研究、逆向工程和对ID验证算法的痛苦挣扎(许多算法非常晦涩难懂且难以找到)之后,使某个人的生活变得更轻松。
特别感谢
感谢以下这些人,他们帮助我们用现实生活中的ID进行测试或指导我们找到他们国家的算法
- Alexandra from 🇷🇴
- Berilay from 🇹🇷
- Christian from 🇨🇭
- Domynikas from 🇱🇹
- Jeppe from 🇩🇰
- Jeremy from 🇫🇷
- Lisa from 🇬🇷
- Miguel from 🇪🇸
以及Nair from 🇵🇹为我们提供包名。
贡献者 ✨
感谢这些美好的人们(表情符号键)
此项目遵循all-contributors规范。欢迎所有类型的贡献!