rechtlogisch / steuernummer
标准化、反标准化和验证德国税务编号(Steuernummer)
Requires
- php: ^8.1
Requires (Dev)
- laravel/pint: ^1.0
- pestphp/pest: ^2.20
- pestphp/pest-plugin-type-coverage: ^2.8
- phpstan/phpstan: ^1.11
README
steuernummer
标准化、反标准化和验证德国税务编号(Steuernummer)
双向格式化来自税务办公室信件(德语:Bescheidformat)或ELSTER-格式(德语:bundeseinheitliches ELSTER-Steuernummerformat)的德国税务编号,并对其进行验证。
基于官方ELSTER文档(章节:3-7;截至2024-06-17)。灵感来源于kontist/normalize-steuernummer和kontist/denormalize-steuernummer。
提示:此软件包仅验证提供的输入的语法和校验位。它不确认提供的税务编号是否已分配给任何实体。如有任何关于您的税务编号正确性的疑问,请联系相关税务办公室。
安装
您可以通过composer安装此软件包
composer require rechtlogisch/steuernummer
用法
标准化
normalizeSteuernummer('21/815/08150', 'BE'); // => '1121081508150'
或者
use Rechtlogisch\Steuernummer\Normalize; (new Normalize('21/815/08150', 'BE')) ->returnElsterSteuernummerOnly(); // => '1121081508150'
提示:如果您想获取更多详细信息,可以使用run()
。
反标准化
denormalizeSteuernummer('1121081508150'); // => '21/815/08150'
或者
use Rechtlogisch\Steuernummer\Denormalize; (new Denormalize('1121081508150')) ->returnSteuernummerOnly(); // => '21/815/08150'
提示:如果您想获取更多详细信息,可以使用run()
。
详细信息
您还可以通过设置returnWithFederalState: true
来控制结果。当设置为true
时,将添加关于税务编号来自哪个联邦州的信息到结果中。
denormalizeSteuernummer('1121081508150', returnWithFederalState: true); // [ // 'steuernummer' => '21/815/08150', // 'federalState' => 'BE', // ]
或者
use Rechtlogisch\Steuernummer\Denormalize; (new Denormalize('1121081508150')) ->returnWithFederalState(); // [ // 'steuernummer' => '21/815/08150', // 'federalState' => 'BE', // ]
提示:如果您想获取更多详细信息,可以使用run()
。
验证
您可以通过所谓的ELSTER-Steuernummerformat(13位数字)进行验证
isElsterSteuernummerValid('1121081508150'); // => true
或通过提供所谓的Bescheidformat(长度可变)以及联邦州
isSteuernummerValid('21/815/08150', 'BE'); // => true
提示:请注意,根据您输入的格式,有两个函数isElsterSteuernummerValid()
和isSteuernummerValid()
。
替代
use Rechtlogisch\Steuernummer\Validate; (new Validate('1121081508150')) ->run() // ValidationResult::class ->isValid(); // => true
联邦州由ELSTER-格式的第一位数字确定,您可以将它作为第二个参数提供以覆盖自动确定
use Rechtlogisch\Steuernummer\Validate; (new Validate('1121081508150', 'BE')) ->run() // ValidationResult::class ->isValid(); // => true
错误
您可以获取一个解释为什么提供的输入无效的错误列表。每个类的run()
方法返回一个包含getErrors()
方法的DTO。
提示:getErrors()
的键持有异常类的字符串化引用。您可以通过与::class
常量进行比较来检查特定错误。例如:Rechtlogisch\Steuernummer\Exceptions\InvalidElsterSteuernummerLength::class
。
验证错误
use Rechtlogisch\Steuernummer\Validate; (new Validate('123456789012', 'BE')) ->run() // ValidationResult::class ->getErrors(); // [ // 'Rechtlogisch\Steuernummer\Exceptions\InvalidElsterSteuernummerLength' // => 'elsterSteuernummer must be 13 digits long. You provided: 12 digits.' // ]
标准化错误
use Rechtlogisch\Steuernummer\Normalize; (new Normalize('123456789', 'BE')) ->run() // NormalizationResult::class ->getErrors(); // [ // 'Rechtlogisch\Steuernummer\Exceptions\InvalidSteuernummerLength' // => 'steuernummer for BE must contain exactly 10 digits. You provided: 9 digits.' // ]
反标准化错误
use Rechtlogisch\Steuernummer\Denormalize; (new Denormalize('123456789012')) ->run() // DenormalizationResult::class ->getErrors(); // [ // 'Rechtlogisch\Steuernummer\Exceptions\InvalidElsterSteuernummerLength' // => 'elsterSteuernummer must be 13 digits long. You provided: 12 digits.' // ]
提示:所有*Result::class
都扩展了ResultDto。
支持的税务办公室
默认情况下,包含在ELSTER ERiC库中的税务办公室代码(德语:Bundesfinanzamtsnummer - 简称BUFA)由此软件包支持。目前基于ERiC 40.1.8。您可以在src/Bufas.php中找到列表。
该列表包括测试BUFAs,在生产中无效。建议在生产环境中使用以下环境变量禁用它们
STEUERNUMMER_PRODUCTION=true
或者在PHP中
putenv('STEUERNUMMER_PRODUCTION=true');
测试
composer test
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
如果您发现任何与安全相关的问题,请通过电子邮件发送到open-source@rechtlogisch.de,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。