通过MD5函数生成固定长度的 唯一 ID

我们知道 md5 是常用的 Hash 函数用于产生消息摘要,校验文件等。

但是在日常的操作中,记忆一个128位长度,或者32个16进制字符并不是一件容易的事情。

在实际针对某设备做逆向工程,取得 ID 时,发现输入和输出是一一对应的。固定的输入有固定的输出。我们采用 md5 函数,然后设置了一定的变换,取得了6位固定长度,大小写数字混合,第一个字符不为数字的算法。

<?php
$name = ‘abcd’;
$mac = ’00:12:34:56:78:ea’;
$md = md5($name.$mac);
// echo $md. ” length:”.strlen($md).”\n”;
$charset = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789’;
$d = ”;
for ($i = 0; $i<6; $i++) {

// 取 md5 里的,每5个字符转换成10进制后对61求余数。
$c = substr($md,$i*5,5);
$cs = hexdec($c);

// $charset 故意设置成61位,是一个质数,去掉了数字0
$pos = $cs % 61;
// 第一个不是数字
if ($i == 0 and $pos > 51 ) $pos -= 30;
$d .=$charset[$pos];
}
echo $d.”\n”;

作者: 甬洁网络

--移动互联网&物联网技术提供商