hylianshield / base32-crockford
Crockford 基数32编码器和解码器的实现
1.0.1
2017-01-28 21:12 UTC
Requires
- php: ^7.0
- hylianshield/alphabet: ^1.0
Requires (Dev)
- hylianshield/validator-base-encoding: ^2.0.3
- phpunit/phpunit: ^5.7.5
This package is auto-updated.
Last update: 2024-08-29 03:47:27 UTC
README
本软件包包含一个编码器/解码器,实现了 Crockford 基数32 的实现。
安装
composer require hylianshield/base32-crockford:^1.0
规范
使用方法
<?php use HylianShield\Encoding\Base32CrockfordEncoder; $encoder = new Base32CrockfordEncoder(); $encoded = $encoder->encode(1337); // 0000019S5 $decoded = $encoder->decode('0000019S5'); // 1337
限制
尽管大数可以被正确编码,但PHP内建的乘法运算在数字太大时无法返回正确响应。
这可以通过使用 BC Math 来解决,但由于它默认未安装,这个实现有一个上限。
在测试的系统中,上限在 18.014.398.509.481.982
和 36.028.797.018.963.966
之间。读作:强制的18个万亿和强制的36个万亿。这在使用不同的CPU架构时可能会有所不同。
查看 示例脚本 以重现这些发现。或者简单地运行
composer example
这将输出
... previous rows ...
#2251799813685246 => 000001ZZ-ZZZZZZZYN => 2251799813685246
#4503599627370494 => 000003ZZ-ZZZZZZZY7 => 4503599627370494
#9007199254740990 => 000007ZZ-ZZZZZZZYG => 9007199254740990
#18014398509481982 => 00000FZZ-ZZZZZZZY$ => 18014398509481982
#36028797018963966 => 00001000-0000000Y~ =>
Check symbol "~" (33) mismatches "10000000000Y" (36028797018963998).
可以看到左边的数字不再与右边的数字匹配。