定制 pinefox/personnummer 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pinefox/personnummer

Composer 安装命令:

composer require pinefox/personnummer

包简介

Validate personal identity numbers

README 文档

README

  • Validate Swedish personnummer (civic numbers), samordningsnummer (coordination numbers), reservnummer (reserve numbers), Danish CPR numbers, and Norwegian birth numbers.
  • It is important to note that this library provides only validation.
  • Reserve numbers are arbitrarily constructed in different ways, but may look alike. This means that a given reserve number may also identify as another type of reserve number. The helper methods for each individual reserve number type will only indicate that the current reserve number has passed validation for that type.

Different types of reserve numbers

Different reserve number standards are used in specific Swedish regions and may share similarity in their construction.

Abbreviation Description
VGR Västra Götalandsregionen
SLL Region Stockholm (former Stockholm läns landsting)
RVB Region Västerbotten

Installation

composer require pinefox/personnummer

Methods

Static

Method Arguments Returns
parse string identificationNumber, [ array options* ] Instance
valid string identificationNumber, [ array options* ] bool

Instance

Method Arguments Returns
format bool longFormat string
getAge none int
isMale none bool
isFemale none bool
isPersonalIdentityNumber none bool
isCoordinationNumber none bool
isReserveNumber none bool
isTNumber none bool
isVgrReserveNumber none bool
isSllReserveNumber none bool
isRvbReserveNumber none bool
isDanishCprNumber none bool
isNorwegianBirthNumber none bool
Property Type Description
century string Century, two digits
year string Year, two digits
fullYear string Year, four digits
month string Month, two digits
day string Day, two digits
sep string Separator (-/+)
num string Suffix number, three digits
check string Luhn check digit, one digit

Errors

When an identification number is invalid a PersonnummerException is thrown.

Options

Option Type Default Description
allowPersonalIdentityNumber bool true Accept Swedish personal identity numbers (YYMMDD-XXXX).
allowCoordinationNumber bool true Accept coordination numbers.
allowTNumber bool true Accept reserve numbers with single character in 9th position.
allowVgrReserveNumber bool true Accept VGR reserve numbers (see specification).
allowSllReserveNumber bool true Accept SLL reserve numbers (see specification).
allowRvbReserveNumber bool true Accept RVB reserve numbers (see specification).
allowDanishCprNumber bool true Accept Danish CPR numbers (DDMMYY-SSSS format).
allowNorwegianBirthNumber bool true Accept Norwegian birth numbers (11-digit format).

Examples

Validation

use Personnummer\Personnummer;

Personnummer::valid(1212121212);
//=> true

Personnummer::valid('20121212-1212');
//=> true

Format

use Personnummer\Personnummer;

// Short format (YYMMDD-XXXX)
(new Personnummer(1212121212))->format();
//=> 121212-1212

// Short format for 100+ years old
(new Personnummer('191212121212'))->format();
//=> 121212+1212

// Long format (YYYYMMDDXXXX)
(new Personnummer('1212121212'))->format(true);
//=> 201212121212

Get Age

use Personnummer\Personnummer;

(new Personnummer('1212121212'))->age;
//=> 7

Get Sex

use Personnummer\Personnummer;

(new Personnummer('1212121212'))->isMale();
//=> true
(new Personnummer('1212121212'))->isFemale();
//=> false

Danish CPR Numbers

use Personnummer\Personnummer;

// Validate Danish CPR
Personnummer::valid('010499-9995', ['allowDanishCprNumber' => true]);
//=> true

// Format Danish CPR  
(new Personnummer('0104999995', ['allowDanishCprNumber' => true]))->format();
//=> 010499-9995

// Check if it's Danish CPR
(new Personnummer('010499-9995', ['allowDanishCprNumber' => true]))->isDanishCprNumber();
//=> true

// Century determination based on 7th digit and year
(new Personnummer('010499-9995', ['allowDanishCprNumber' => true]))->fullYear;
//=> 1999 (digit 9, year 99 = 1900s)

Norwegian Birth Numbers

use Personnummer\Personnummer;

// Validate Norwegian birth number
Personnummer::valid('03016213704');
//=> true

// Check if it's Norwegian birth number
(new Personnummer('03016213704'))->isNorwegianBirthNumber();
//=> true

// Format Norwegian birth number (no separator)
(new Personnummer('03016213704'))->format();
//=> 03016213704

// Gender determination
(new Personnummer('03016213704'))->isMale(); // Check digit 4 is even = male
//=> true

See PersonnummerTest.php for more examples.

License

MIT

pinefox/personnummer 适用场景与选型建议

pinefox/personnummer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.34k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 04 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「security」 「utility」 「Swedish」 「Personnummer」 「Personal id」 「Social security number」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 pinefox/personnummer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 pinefox/personnummer 我们能提供哪些服务?
定制开发 / 二次开发

基于 pinefox/personnummer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 4.34k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 13
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 11
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-04-01