spoorsny/south-african-id

一个自验证的值对象,封装了南非政府签发的个人身份证号码。

v3.1.0 2024-08-07 10:33 UTC

This package is auto-updated.

Last update: 2024-09-15 17:59:58 UTC


README

Repository Bannner

Latest Version on Packagist Total Downloads GitHub Tests Action Status PHPUnit Code Coverage

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 文件。