faaizz/pin_generator

一个用于生成和发出PIN(个人识别码)的Laravel包,适用于现金卡、门锁等。

2.0.0 2022-05-11 16:44 UTC

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

参考