PESEL号码正确性检查

4.0.0 2021-10-08 12:30 UTC

This package is auto-updated.

Last update: 2024-09-10 15:51:33 UTC


README

Build Status Coverage Status StyleCI Latest Stable Version License

PESEL号码轻松验证包。

安装

Composer:

composer require kkszymanowski/pesel

升级指南

2.* -> 3.*

版本3与版本2向后兼容,但需要PHP >=7.3。除了提高PHP版本外,无需进行任何更改。

建议将捕获的异常InvalidArgumentException更改为对应具体验证错误的异常

  • Pesel\Exceptions\InvalidLengthException - 长度错误
  • Pesel\Exceptions\InvalidCharactersException - 包含非数字字符
  • Pesel\Exceptions\InvalidChecksumException - 校验和错误

或者简单地使用Pesel\Exceptions\PeselValidationException来捕获所有验证错误。

3.* -> 4.*

版本4更改了PESEL号码的验证,以正确识别像0000000000044444444444这样的错误号码。因此,版本4在这些边缘情况下与版本3不兼容,但在大多数情况下不应有问题。

从版本4开始,如果PESEL号码中的出生日期不正确,将抛出新的异常Pesel\Exceptions\InvalidBirthDateException

使用

创建对象
$pesel = new Pesel($number);

$pesel = Pesel::create($number);

上述方法是等价的。

在创建对象时检查PESEL号码的正确性。

  • 应该有11个字符。
  • 应该只包含数字。
  • 校验和应该是正确的。
  • 应该包含正确的出生日期
    • 年 >= 1800且 < 2300。
    • 月 >= 1且 <= 12。
    • 日 >= 1且不超过该月和该年的天数。

如果至少有一个条件未满足,将抛出相应的异常

  • Pesel\Exceptions\InvalidLengthException - 长度错误
  • Pesel\Exceptions\InvalidCharactersException - 包含非数字字符
  • Pesel\Exceptions\InvalidChecksumException - 校验和错误
  • Pesel\Exceptions\InvalidChecksumException - 日期错误
try {
    Pesel::create($number);

    echo('Numer PESEL jest poprawny');
} catch(Pesel\Exceptions\InvalidLengthException $e) {
    echo('Numer PESEL ma nieprawidłową długość');
} catch(Pesel\Exceptions\InvalidCharactersException $e) {
    echo('Numer PESEL zawiera nieprawidłowe znaki');
} catch(Pesel\Exceptions\InvalidChecksumException $e) {
    echo('Numer PESEL zawiera błędną sumę kontrolną');
} catch(Pesel\Exceptions\InvalidBirthDateException $e) {
    echo('Numer PESEL zawiera nieprawdiłową datę urodzenia');
}

所有上述异常都继承自Pesel\Exceptions\PeselValidationException,因此如果不需要区分具体的验证错误,可以使用单个catch子句。

try {
    Pesel::create($number);

    echo('Numer PESEL jest poprawny');
} catch(\Pesel\Exceptions\PeselValidationException $e) {
    echo('Numer PESEL jest błędny');
}
获取PESEL号码的内容
$pesel = new Pesel($number);

$pesel->getNumber();    // Zwraca string

$pesel->getBirthDate(); // Zwraca DateTime

$pesel->getGender();    // Zwraca Pesel::GENDER_MALE lub Pesel::GENDER_FEMALE
检查正确性
Pesel::isValid($pesel); // Zwraca bool, nie rzuca wyjątku
检查出生日期

$birthDate参数是PHP内置DateTime类的实例

PeselValidator::hasBirthDate(Pesel::create($pesel), $birthDate);
检查性别
PeselValidator::hasGender(Pesel::create($pesel), Pesel::GENDER_MALE);

PeselValidator::hasGender(Pesel::create($pesel), Pesel::GENDER_FEMALE);