byrokrat / id
瑞典个人身份证和公司身份证号的数据类型
2.1.1
2020-12-07 22:20 UTC
Requires
- php: >=7.3
Requires (Dev)
README
个人身份证
瑞典个人身份证和公司身份证号的数据类型。
安装
composer require byrokrat/id
使用
use byrokrat\id\PersonalId; use byrokrat\id\IdInterface; $id = new PersonalId('940323-2383'); // outputs 940323-2383 echo $id; // outputs 940323-2383 echo $id->format(IdInterface::FORMAT_10_DIGITS); // outputs 199403232383 echo $id->format(IdInterface::FORMAT_12_DIGITS); // outputs 940323 echo $id->format('ymd'); // outputs something like 25 echo $id->getAge(); // outputs 1 (true) echo $id->isFemale();
use byrokrat\id\OrganizationId; use byrokrat\id\IdInterface; $id = new OrganizationId('835000-0892'); // outputs 835000-0892 echo $id->format(IdInterface::FORMAT_10_DIGITS); // outputs 008350000892 echo $id->format(IdInterface::FORMAT_12_DIGITS); // outputs 1 (true) echo $id->isSexUndefined(); // outputs 1 (true) echo $id->isNonProfit();
类层次结构
IdInterface
基础接口。在这里可以找到完整的API参考。PersonalId
瑞典个人的识别号(personnummer)。CoordinationId
非公民的标识符(samordningsnummer)。FakeId
当一个人必须有一个身份标识,但未在瑞典当局注册时,可以使用替换标识。
OrganizationId
瑞典公司或组织的标识(organisationsnummer)。NullId
空对象实现。
创建ID对象
创建ID对象可能很复杂。
- 如果被识别的个人不是瑞典公民,则个人身份可以是一个协调身份。
- 如果公司只由一个个人注册(egenföretagare),则公司身份证可以是一个个人身份。
- 如果个人不是瑞典公民,则单个人公司可以使用协调身份。
- 有时您可能希望使用
FakeId
实现来处理没有有效瑞典个人身份证的人员。
为了解决这些困难,包含了一系列可装饰的工厂。通过在创建时链式调用工厂对象来创建具有所需能力的工厂。
use byrokrat\id\PersonalIdFactory; use byrokrat\id\CoordinationIdFactory; $factory = new PersonalIdFactory(new CoordinationIdFactory); $id = $factory->createId('940323-2383');
在这个例子中,工厂将首先尝试创建一个PersonalId
,如果失败,它将尝试创建一个CoordinationId
,如果失败,它将抛出一个异常。
以下工厂包含在内
PersonalIdFactory
CoordinationIdFactory
FakeIdFactory
OrganizationIdFactory
NullIdFactory
FailingIdFactory
控制包含日期的ID的分隔符和世纪
为了控制日期的计算,您可以通过传递一个datetime对象来指定解析时间。
use byrokrat\id\PersonalIdFactory; $factory = new PersonalIdFactory; // Year interpreted as 2010 as parsing is done 2020 $young = $factory->createId('1001012382', new \DateTime('20200101')); // Year interpreted as 1910 as parsing is done 1990 $older = $factory->createId('1001012382', new \DateTime('19900101')); // outputs 2010 echo $young->format('Y'); // outputs 1910 echo $older->format('Y');
指定解析日期还会影响所使用的分隔符。
use byrokrat\id\PersonalIdFactory; $factory = new PersonalIdFactory; // Delimiter is '+' as parsing is done in 2050 $id = $factory->createId('194001079120', new \DateTime('20500101')); // outputs 400107+9120 echo $id;
格式化
可以使用format()
方法以自定义格式打印ID,其中$formatStr
是格式令牌和非格式化字符的混合(有关格式令牌的列表,请参阅下面)。
echo $id->format($formatStr);
如果您需要格式化大量ID,可以创建一个格式化对象。
use byrokrat\id\Formatter\Formatter; use byrokrat\id\PersonalId; $formatter = new Formatter('y'); // outputs 82 echo $formatter->format(new PersonalId('940323-2383'));
格式化令牌
不是格式化令牌的字符将由格式化器原样返回。
定义
关于ID号码构建和使用的瑞典来源
Symfony Bundle
要在您的Symfony项目中用作验证规则,请参阅第三方包IdentityNumberValidatorBundle。