olssonm/swedish-entity

瑞典个人编号和组织编号的验证器和格式化工具。包含Laravel验证器。

v1.3.3 2023-02-15 07:40 UTC

README

Latest Version on Packagist PHP version Build Status Software License

验证、格式化和提取瑞典个人编号(社会保障号码)和组织编号(组织号码)的数据。

此包还处理名为“Samordningsnummer”(协调号码)的临时个人身份号码。

还包括Laravel验证器

此包的优点(虽然并非始终严格遵循标准)是能够使用短/长(10或12个字符)格式化,带有或没有分隔符(即11/13个字符)。

请注意,公司总是由10/11个字符组成(带有或没有可选的分隔符)。

此包以personnummer/php-package作为其社会保障处理的基础,但添加了一些额外的属性和方法。

安装

composer require olssonm/swedish-entity

使用

验证

<?php
use Olssonm\SwedishEntity\Person;

(new Person('600411-8177'))->valid()
// true
<?php
use Olssonm\SwedishEntity\Organization;

(new Organization('556016-0680'))->valid()
// true

自动检测实体类型

⚠️ 如果detect-方法失败,将抛出Olssonm\SwedishEntity\Exceptions\DetectException异常。

<?php
use Olssonm\SwedishEntity\Entity;

$entity = Entity::detect('600411-8177');

var_dump(get_class($entity))
// Olssonm\SwedishEntity\Person

格式化

⚠️ 格式化无效实体将导致异常。您应该先进行验证。

个人

<?php
use Olssonm\SwedishEntity\Person;

(new Person('071012-9735'))->format($characters = 12, $separator = true)
// 20071012-9735

(new Person('071012+9735'))->format($characters = 12, $separator = true)
// 19071012+9735

(new Person('200710129735'))->format()
// 071012-9735

组织

<?php
use Olssonm\SwedishEntity\Organization;

(new Organization('5560160680'))->format($separator = true)
// 556016-0680

(new Organization('556016-0680'))->format($separator = false)
// 5560160680

Laravel验证器

该包注册了“entity”规则,该规则接受参数anyorganizationperson

<?php
$this->validate($request, [
    'number' => 'required|entity:organization'
]);

您也可以省略该参数,验证器将回退到any

<?php
$this->validate($request, [
    'number' => 'required|entity'
]);

自定义消息

<?php
use Illuminate\Support\Facades\Validator;

$validator = Validator::make($request->all(), [
    'number' => 'required|entity:person'
], [
    'number.entity' => "Invalid personnummer!"
]);

隐式验证

为了使验证器在社会保障/组织号码缺失或为空字符串时运行(注意,不适用于null),您需要隐式声明,即

'organization_number' => [
    'required_with:company_name',
    'entity:organization',
], 

'organization_number' => [
    'required',
    'entity',
], 

属性

个人

*以下之一:“Dödsbon”、“Stat, landsting och kommuner”、“Aktiebolag”、“Enkelt bolag”、“Ekonomiska föreningar”、“Ideella föreningar och stiftelser”和“Handelsbolag, kommanditbolag och enkla bolag”。 注意:以0、3和4开头的组织,虽然技术上是一个有效号码,但它们是否存在尚不确定,将返回空字符串。

示例

<?php
use Olssonm\SwedishEntity\Person;

$person = new Person('600411-8177');
$person->gender;
// Male

组织

*以下之一:“Dödsbon”、“Stat, landsting och kommuner”、“Aktiebolag”、“Enkelt bolag”、“Ekonomiska föreningar”、“Ideella föreningar och stiftelser”和“Handelsbolag, kommanditbolag och enkla bolag”。 注意:以0、3和4开头的组织,虽然技术上是一个有效号码,但它们是否存在尚不确定,将返回空字符串。

示例

<?php
use Olssonm\SwedishEntity\Organization;

$organization = new Organization('212000-1355');
$organization->type;
// Stat, landsting och kommuner

清洁助手

Entity类包含一个清洁助手,可用于从社会保障号或组织号中删除非法字符

<?php
use Olssonm\SwedishEntity\Entity;

$number = Entity::clean(' 212000-1355a');
// '212000-1355'

请注意,这不会自动应用,因此您需要在验证之前清理字符串。

需要注意的细节

个体经营者

EF(个体经营者)-虽然技术上是一家公司/组织,但使用所有者的个人编号。因此,该号码不会验证为公司/组织。而不是为此使用自定义解决方案(如Creditsafe、Bisnode等通过在组织号/社会保障号中添加额外的数字/字符),一种处理方式是

  • 在期望同时处理人员和公司时使用10位数字(最好使用分隔符)。提示:通过format()PersonOrganization默认都会以10位数字(和分隔符)格式化。
  • 使用detect-方法自动验证两种类型

如果需要在验证后检查类型;

<?php
use Olssonm\SwedishEntity\Entity;
use Olssonm\SwedishEntity\Person;
use Olssonm\SwedishEntity\Organization;
use Olssonm\SwedishEntity\Exceptions\DetectException

try {
    $entity = Entity::detect('600411-8177');
} catch (DetectException $e) {
    // Handle exception
}

// PHP < 8
if(get_class($entity) == Person::class) {
    // Do stuff for person
} elseif(get_class($entity) == Organization::class) {
    // Do stuff for organization
}

// PHP 8
if($entity::class == Person::class) {
    // Do stuff for person
} elseif($entity::class == Organization::class) {
    // Do stuff for organization
}

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

© 2022 Marcus Olsson