faaizz / pin_generator
一个用于生成和发出PIN(个人识别码)的Laravel包,适用于现金卡、门锁等。
2.0.0
2022-05-11 16:44 UTC
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2024-09-26 04:24:51 UTC
README
一个用于生成密码学安全的伪随机PIN(个人识别码)的Laravel包。
目标特性
- 每个PIN由四个数字组成(例如:“2845”)
- 不允许使用“明显”的数字(例如:“1111”,“1234”)
- PIN应该以看似随机的顺序生成
- 只有在前一个有效的PIN被发出后,才应重复使用PIN - 即使程序在PIN之间重新启动。
已实现的功能
- 每个PIN由四个数字组成(例如:“2845”):这是通过确保每个生成的PIN都格式化为4位字符串来实现的。
- 不允许使用“明显”的数字(例如:“1111”,“1234”):这是通过将生成的PIN与预定义的明显数字列表进行比较来满足的。
- PIN应按看似随机的顺序生成:这是通过使用PHP的
random_int()
函数来满足的(该函数生成密码学安全的伪随机整数)。 - 只有在前一个有效的PIN被发出后,才应重复使用PIN - 这通过使用数据库来确保。每次生成新PIN时,都会检查数据库以查看是否已生成所有有效PIN。如果是,则重置数据库。如果不是,则检查数据库中是否存在新生成的PIN,如果已存在,则检查数据库中是否存在前一个有效PIN。如果已发出所有前一个有效PIN,则发出生成的PIN。否则,重新生成PIN并再次进行检查。
安装
要安装PIN Generator包,请运行
composer require faaizz/pin_generator
自动加载
要将包自动注册到Laravel项目中,可以将PinGeneratorServiceProvider
添加到composer.json
中的extra->laravel->providers
,如下所示
... "extra": { "laravel" : { "providers": [ ... "Faaizz\\PinGenerator\\PinGeneratorServiceProvider" ... ] } }
服务提供程序也可以手动在Laravel项目的app/config/app.php
中注册
<?php ... 'providers' => [ ... Faaizz\PinGenerator\PinGeneratorServiceProvider::class ], ...
迁移
可以通过在Laravel项目中执行数据库迁移来运行数据库迁移
php artisan migrate
门面
在将PinGeneratorServiceProvider
注册到Laravel项目后,可以从Faaizz\PinGenerator\Facades
命名空间使用Generator
门面。
用法
通过在Generator
门面上调用generatePin()
方法来轻松生成PIN
use Faaizz\PinGenerator\Facades\Generator; ... $pin = Generator::generatePin();
配置
发布
要将包配置发布到Laravel项目,请运行
php artisan vendor:publish --provider="Faaizz\PinGenerator\PinGeneratorServiceProvider" --tag="config"
这会将配置发布到app/config/pingenerator.php
。
自定义
要配置包,请适当编辑Laravel项目中的app/config/pingenerator.php
。
- 更改数字数量:要更改生成的PIN的位数,将所需值映射到
digit
键。例如,要生成10位PIN
// config/config.php return [ 'digits' => 10 ... ];
- 添加/删除明显数字:要添加/删除“明显”数字,按需编辑
obvious_numbers
的映射值
// config/config.php return [ ... 'obvious_numbers' => [ 0000, 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 1234, 5678, 1010, 2020 ] ];
测试
通过执行以下操作运行测试
# Note: composer install must have been run to install dependencies
./execTests.sh