spoorsny / south-african-id
一个自验证的值对象,封装了南非政府签发的个人身份证号码。
Requires
- php: ^8.3
Requires (Dev)
- ext-xdebug: *
- friendsofphp/php-cs-fixer: ^3.59
- phpunit/phpunit: ^11.2
- rregeer/phpunit-coverage-check: ^0.3.1
README
PHP的南非身份证
一个自验证的值对象,封装了南非政府签发的个人身份证号码,用于PHP。
南非政府签发的身份证号码由13位数字组成,包括以下部分
- 出生日期:前6位数字表示出生日期,格式为yymmdd。
- 性别:接下来的4位数字表示性别,如果值为5000或以上,则为男性;否则为女性。
- 国籍:接下来的单个数字表示个人的国籍状态:0为公民,1为永久居民。
- 种族:接下来的单个数字历史上用于表示个人的种族。
- 校验码:最后一位数字用于验证整个号码,以防止输入错误。它使用Luhn算法计算。
安装
使用Composer安装此包。
composer require spoorsny/south-african-id
用法
可以通过向其构造函数传递一个字符串来实例化值对象。
use Spoorsny\ValueObjects\SouthAfricanId; $idNumber = new SouthAfricanId('9308062469083');
如果字符串参数不是有效格式,将抛出一个带有错误类型信息的InvalidArgumentException
。
值对象可以在使用字符串的地方使用,因为它实现了Stringable
接口。例如,可以通过传递另一个实例给构造函数来实例化值对象。
$idNumber1 = new SouthAfricanId('4608162219097'); $idNumber2 = new SouthAfricanId($idNumber1);
注意
值对象总是将日期段和性别段之间、性别段和国籍段之间用单个空格分隔。
它可以与strval()
函数和echo
语句一起使用。
$idNumber = new SouthAfricanId('4608162219097'); strval($idNumber); // Evaluates to '460816 2219 097'. echo $idNumber; // Prints '460816 2219 097'.
可以使用equals()
方法检查类的不同实例是否相等。
$idNumber1 = new SouthAfricanId('4608162219097'); $idNumber2 = new SouthAfricanId('4608162219097'); $idNumber3 = new SouthAfricanId('8202277454090'); $idNumber1->equals($idNumber2); // true $idNumber1->equals($idNumber3); // false
尽管身份证号码以出生日期开头,但不能用它来比较一个人的年龄是否比另一个人大。这是因为日期中缺少世纪部分。
有用的信息编码在身份证号码中可以提取,例如
$idNumber->birthMonth(); $idNumber->birthDay(); $idNumber->isFemale(); $idNumber->isMale(); $idNumber->isCitizen(); $idNumber->isPermanentResident();
可以按以下方式从值对象中提取身份证号码的不同部分
$idNumber->dateSegment(); $idNumber->genderSegment(); $idNumber->citizenshipSegment(); $idNumber->raceSegment(); $idNumber->checksumSegment();
贡献
要为此包做出贡献,请参阅贡献指南。
许可证
版权 © 2024 Geoffrey Bernardo van Wyk https://geoffreyvanwyk.dev
此文件是包 spoorsny/south-african-id 的一部分。
包 spoorsny/south-african-id 是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或者(根据您的选择)任何更高版本。
包 spoorsny/south-african-id 是免费软件:希望它有用,但没有提供任何保证;甚至没有关于适销性或适用于特定目的的隐含保证。有关详细信息,请参阅GNU通用公共许可证。
您应该已经收到与包 spoorsny/south-african-id 一起的 GNU 通用公共许可证副本。如果没有,请参阅https://gnu.ac.cn/licenses/。
要获取许可证副本,请参阅本存储库中的LICENSE 文件。