robertogallea / laravel-codicefiscale
php/laravel 的 Codice fiscale 验证
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.3
- illuminate/support: ^11.0
- illuminate/validation: ^11.0
- nesbot/carbon: ^3.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^9.1
- phpunit/phpunit: >=9.0
This package is auto-updated.
Last update: 2024-09-16 14:23:42 UTC
README
laravel-codicefiscale
laravel-codicefiscale 是一个用于管理意大利 CodiceFiscale
(即税号)的包。该包允许轻松验证和解析 CodiceFiscale。它也适合 Laravel,因为它提供了一种方便的自定义验证器用于请求验证。
Laravel 版本兼容性
重要更新:现在您可以使用非默认的
IstatRemoteCSVList
城市解码器动态加载 ISTAT 的城市代码。
安装
运行以下命令安装此包的最新适用版本
composer require robertogallea/laravel-codicefiscale:^2
Laravel
在您的应用配置中,将服务提供者添加到 $providers
数组 (仅适用于 Laravel 5.4 或以下)
'providers' => [ ... robertogallea\LaravelCodiceFiscale\CodiceFiscaleServiceProvider::class, ],
验证错误消息已翻译为 it
和 en
语言,如果您想添加新语言,请发送 PR。
Lumen
在 bootstrap/app.php
中,注册服务提供者
$app->register(robertogallea\LaravelCodiceFiscale\CodiceFiscaleServiceProvider::class);
配置
要自定义包配置,您必须将配置文件导出到 config/codicefiscale.php
。
这可以通过以下命令实现
php artisan vendor:publish --provider="robertogallea\LaravelCodiceFiscale\CodiceFiscaleServiceProvider" --tag="config"
您可以配置以下参数
city-decoder
:用于解码城市代码的类(见 城市代码解析),默认为InternationalCitiesStaticList
。date-format
:用于解析出生日期的日期格式,默认为'Y-m-d'
。labels
:用于male
和female
人员的标签,默认为'M'
和'F'
。
语言文件
您可以通过发布验证翻译来自定义验证消息
php artisan vendor:publish --provider="robertogallea\LaravelCodiceFiscale\CodiceFiscaleServiceProvider" --tag="lang"
验证
要验证 Codice fiscale,请在您的验证规则数组中使用 codice_fiscale
关键字
public function rules() { return [ 'codicefiscale' => 'codice_fiscale', //... ]; }
从版本 1.9.0 开始,您可以对其他表单字段进行 Codice fiscale 验证,以检查是否存在匹配。
您必须指定所有必填字段
名字
姓氏
出生日期
地点
性别
向 codice_fiscale
规则提供参数。
例如
public function rules() { return [ 'codicefiscale' => 'codice_fiscale:first_name=first_name_field,last_name=last_name_field,birthdate=birthdate_field,place=place_field,gender=gender_field', 'first_name_field' => 'required|string', 'last_name_field' => 'required|string', 'birthdate_field' => 'required|date', 'place_field' => 'required|string', 'gender_field' => 'required|string|max:1', //... ]; }
如果提供的 codicefiscale 和从输入字段生成的 codicefiscale 不匹配,则验证失败。
实用 CodiceFiscale 类
Codice fiscale 可以包裹在 robertogallea\LaravelCodiceFiscale\CodiceFiscale
类中以增强其功能。
use robertogallea\LaravelCodiceFiscale\CodiceFiscale; ... try { $cf = new CodiceFiscale(); $result = $cf->parse('RSSMRA95E05F205Z'); var_dump($result); } catch (Exception $exception) { echo $exception; }
在有效 CodiceFiscale 的情况下,它会产生以下结果
[ "gender" => "M" "birth_place" => "F205" "birth_place_complete" => "Milano", "day" => "05" "month" => "05" "year" => "1995" "birthdate" => Carbon @799632000 { date: 1995-05-05 00:00:00.0 UTC (+00:00) } ]
如果出错,CodiceFiscale::parse()
会抛出 CodiceFiscaleValidationException
,您可以使用 $exception->getCode()
获取定义的常量之一。
CodiceFiscaleException::NO_ERROR
CodiceFiscaleException::NO_CODE
CodiceFiscaleException::WRONG_SIZE
CodiceFiscaleException::BAD_CHARACTERS
CodiceFiscaleException::BAD_OMOCODIA_CHAR
CodiceFiscaleException::WRONG_CODE
CodiceFiscaleException::MISSING_CITY_CODE
如果您不想捕获异常,可以使用 CodiceFiscale::tryParse()
use robertogallea\LaravelCodiceFiscale\CodiceFiscale; ... $cf = new CodiceFiscale(); $result = $cf->tryParse('RSSMRA95E05F205Z'); if ($result) { var_dump($cf->asArray()); } else { echo $cf->getError(); }
它返回上述相同的值,您可以使用 $cf->isValid()
检查 codicefiscale 是否有效,并使用 $cf->getError()
获取错误。这在 blade 模板中特别有用。
@php($cf = new robertogallea\LaravelCodiceFiscale\CodiceFiscale()) @if($cf->tryParse($codicefiscale)) <p><i class="fa fa-check" style="color:green"></i>{{$cf->getCodiceFiscale()}}</p> @else <p><i class="fa fa-check" style="color:red"></i>{{$cf->getError()->getMessage()}}</p> @endif
Codice fiscale 生成
类 CodiceFiscale
可以用于根据输入值生成 codice fiscale 字符串
$first_name = 'Mario'; $last_name = 'Rossi'; $birth_date = '1995-05-05'; // or Carbon::parse('1995-05-05') $birth_place = 'F205'; // or 'Milano' $gender = 'M'; $cf_string = CodiceFiscale::generate($first_name, $last_name, $birth_date, $birth_place, $gender);
Faker 集成
您可以使用提供的 faker 扩展在您的工厂中生成假 codice fiscale
class PersonFactory extends Factory { public function definition(): array { return [ 'first_name' => $firstName = fake()->firstName(), 'last_name' => $lastName = fake()->lastName(), 'fiscal_number' => fake()->codiceFiscale(firstName: $firstName, lastName: $lastName), ]; }
注意:您可以提供一些、所有或不需要为生成 codice fiscale 所需的信息(firstName
、lastName
、birthDate
、birthPlace
、gender
)
城市代码解析
解码城市代码有三种策略
InternationalCitiesStaticList
:意大利城市的静态列表;ItalianCitiesStaticList
:国际城市的静态列表;IstatRemoteCSVList
:动态列表(从网络加载)的意大利城市,从官方 ISTAT csv 文件加载。请注意,列表被缓存(默认为一天,请参阅配置以进行更改)。CompositeCitiesList
:使用配置键codicefiscale.cities-decoder-list
中的基本CityDecoderInterface
合并两个CityDecoderInterface
类的结果(例如IstatRemoteCSVList
和InternationalCitiesStaticList
)。
默认情况下,该包使用 InternationalCitiesStaticList
类来查找代码对应的城市,反之亦然。但是,您可以使用自己的类来更改使用的策略。
您只需要实现 CityDecoderInterface
及其 getList()
方法。然后,要使用它,只需将实例传递给 CodiceFiscale
类。
例如
class MyCityList implements CityDecoderInterface { public function getList() { // Implementation } }
... $cf = new CodiceFiscale(new MyCityList) ...
集成您自己的城市
注意:如果发现缺少城市,请提交一个 PR!
如果您想集成城市列表,可以使用 CompositeCitiesList
,通过合并一个提供的解码器和自定义解码器的结果。
例如
// conf/codicefiscale.php
return [
'city-decoder' => '\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\CompositeCitiesList',
...
'cities-decoder-list' => [
'\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\InternationalCitiesStaticList',
'YourNamespace\MyCustomList',
]
其中 MyCustomList
定义为
...
class MyCustomList implements CityDecoderInterface
{
public function getList()
{
return [
'XYZ1' => 'My city 1',
'XYZ2' => 'My city 2',
]
}
}