glanchow / wok-lfsr-bundle
线性反馈移位寄存器 (LFSR) for Symfony2
Requires
- symfony/symfony: >=2.1.0
This package is not auto-updated.
Last update: 2024-09-23 14:59:35 UTC
README
线性反馈移位寄存器 (LFSR) for Symfony2
概述
安装
编辑 composer.json
"require": { ... "glanchow/wok-lfsr-bundle": "*"
然后更新
php composer.phar update
配置
// src app/AppKernel.php public function registerBundles() ... $bundles = array( ... new Wok\LfsrBundle\WokLfsrBundle(),
# src app/config/config.yml # Wok LSFR Configuration wok_lfsr: feedback: 0xC state: 1 base: null pad: false
找到您的反馈词
以下是 n up to 4096 的抽头列表:http://www.eej.ulst.ac.uk/~ian/modules/EEE515/files/old_files/lfsr/lfsr_table.pdf
以下是 n up to 40 的反馈词列表,但有多个不同的反馈词:https://www.ece.cmu.edu/~koopman/lfsr/index.html
假设您想为 8 位 LFSR 获取一个最大长度的反馈词。
对于 n = 8,可能的抽头为 8、6、5、4。
$ bc obase=16 ibase=2 10111000 B8
或者更简单地说
$ bc obase=16 2^7 + 2^5 + 2^4 + 2^3 B8
0xB8 是您的反馈词。
一个小反馈词表
用法
创建一个实例
使用默认或全局配置
$lfsr = $this->get('wok_lfsr');
使用自定义配置
$config = array( 'feedback' => 0xC, 'state' => '11', 'base' => '01', 'pad' => true ); $lfsr = $this->get('wok_lfsr')->config($config);
下一个状态
$state = $lfsr->next();
模式
运行完整周期
$config = array( 'feedback' => 0xC, 'state' => 0x1, 'base' => null, 'pad' => false ); $lfsr = $this->get('wok_lfsr')->config($config); $lfsr->setState(4); $end = 4; $iterations = 0; do { $iterations++; $state = $lfsr->next(); echo $state . "<br/>"; } while ($state != $end); echo "$iterations iterations<br/>";
食谱
看起来随机的标识符
LFSR 可用于生成看起来随机的数据库记录标识符(mysql、postgresql 等)。
假设您想要一个针对十亿条记录中之一的一个短随机看起来随机的标识符。
# src app/config/config.yml wok_lfsr: feedback: 0x32800000 state: 1 base: 0123456789bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ pad: true
让我们解释一下这个配置。
对于十亿条记录,我们至少需要 30 位。
我们在网上找到了一个 30 位的反馈词:0x32800000。
对象会自动找到这是一个 30 位 LFSR 的反馈词,这很容易,因为 n 位 LFSR 需要 n 个抽头。
为了得到一个短词,我们选择了 50 个符号的基础。
对象会自动找到我们需要 6 个符号(50^6)来写所有(2^30)个词,并使用基础的第一符号作为填充符号。
警告
代码和处理器限制
如果您的反馈词大于服务器的 PHP_INT_MAX,这取决于处理器,它将被转换为浮点数,并且当前代码将提供错误的结果。
无符号整数
PHP 不使用无符号整型。在您只想使用正数或使用自定义基础的情况下,请使用处理器容量最多 n -1 位。