nextapps/unique-codes

此包已被弃用且不再维护。作者建议使用 wotz/unique-codes 包。

生成独特且看起来随机的代码

3.0.0 2024-09-26 11:33 UTC

README

Latest Version on Packagist Total Downloads

此包生成独特且看起来随机的代码。这些代码可用于优惠券、代金券等。现在您可以生成成千上万的代码,无需检查以前是否已生成过该代码。

use Wotz\UniqueCodes\UniqueCodes;

// Generate 100 unique codes for numbers 1 to 100
$codes = (new UniqueCodes())
    ->setObfuscatingPrime(9006077)
    ->setMaxPrime(7230323)
    ->setCharacters('LQJCKZMWDPTSXRGANYVBHF')
    ->setLength(6)
    ->generate(1, 100);

// Result: LWXNHJ (1), LACSVK (2), QLNMNM (3), ... , LYMJHL (100), QJVBVJ (101), LQXGQC (102), ... , LJQ5DJ (7230320), LC17CS (7230321), LZ8J8H (7230322)

安装

您可以通过composer安装此包

composer require wotz/unique-codes

请勿使用此包的v1版本,因为它包含错误。如果您目前使用的是v1版本,应升级到v2(请参阅升级指南!)。

使用方法

Generate()方法

要生成独特代码,您提供起始和结束数字。它将使用该范围内的数字生成代码。每个数字都将始终生成相同的独特且看起来随机的代码。这意味着您应确保不会再次使用相同的数字。这可以通过保存您已使用的数字范围或始终使用代码数据库表中的下一个自动递增ID来实现。

如果需要同时生成大量代码,可能会占用大量内存。为了防止这种情况,默认返回一个生成器。如果您想要一个数组,可以将generate方法的第三个参数设置为true。如果您只想根据一个数字生成一个代码,只需设置generate方法的第一个参数即可。

// Returns generator to create codes for numbers 1 to 100.
->generate(1, 100);

// Returns array with created codes for numbers 1 to 100.
->generate(1, 100, true);

// Returns string with created code for number 100.
->generate(100);

设置器

某些设置器是生成独特代码所必需的

  • setObfuscatingPrime()
  • setMaxPrime()
  • setCharacters()
  • setLength()

setObfuscatingPrime($number)

这个素数用于将1到最大素数之间的数字进行混淆。此素数必须大于您提供给setMaxPrime方法的最大素数。

setMaxPrime($number)

最大素数决定了您可以生成的最大独特代码数量。如果您提供101,则可以生成从1到100的代码。此素数必须小于您提供给setObfuscatingPrime方法的素数。

setCharacters($string)

字符列表包含所有可以用来构建独特代码的字符。

setLength($number)

每个独特代码的长度。

setPrefix($string)

每个独特代码的前缀。

setSuffix($string)

每个独特代码的后缀。

setDelimiter($string, $number)

代码可以分割成不同的部分,并使用指定的分隔符拼接起来。

它是如何工作的?

代码生成包括2个步骤

  • 混淆顺序数字
  • 编码混淆后的数字

混淆顺序数字

如果您对顺序数字进行编码,您仍然会看到编码后的字符串是顺序的。为了消除顺序性,我们使用了“模乘法逆元”。

您定义范围的上限。这决定了您能混淆的最大数字。然后每个数字都被映射到介于1和上限之间的唯一混淆数字。您将输入数字与一个随机(较大的)素数相乘,并确定乘积输入数字除以范围上限的余数。

$obfuscatedNumber = ($inputNumber * $obfuscatingPrimeNumber) % $maxPrimeNumber

编码混淆后的数字

在下一步中,混淆数字被编码为字符串。这只是一个使用除法和取模的基数转换。

测试

composer test

代码审查

composer lint

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

鸣谢

本软件包深受Jim Mischel撰写的2篇文章的启发

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件