PHP用整数生成绝对不重复的唯一ID类库——Hashids

2018年3月15日22:02:58PHP用整数生成绝对不重复的唯一ID类库——Hashids已关闭评论3,513 978字阅读3分15秒

分享给大家PHP用整数生成绝对不重复的唯一ID类库

在项目中,暴露给用户真实的项目ID,很有可能被恶意采集,很有可能被猜到目前有多少量(对造假不利)。前两天目录站群里有一个哥们分享了一个php类库Hashids,就可以解决这个问题。

Hashids是一个能利用整数生成出短小、唯一、非连续标识符的类库,它支持包含php在内的好多好多(真的好多)种语言。

Hashids支持通过生成出来的标识符进行解码为原数字,还支持加盐加密,不会因为大家都用这个类库就被猜到真实ID。

直接上代码看超简单的用法:

$id = 123;
 
$hashids = new Hashids\Hashids();
 
// 编码
$hashID = $hashids->encode($id);
// 解码
$decodeResult = $hashids->decode($hashID);
var_dump($hashID, $decodeResult);
 
// 数组编码
$hashID = $hashids->encode([1, 2, 3]);
// 数组解码
$decodeResult = $hashids->decode($hashID);
var_dump($hashID, $decodeResult);
 
// 加盐编码
$hashids = new Hashids\Hashids('我是盐');
// 编码
$hashID = $hashids->encode($id);
// 解码
$decodeResult = $hashids->decode($hashID);
var_dump($hashID, $decodeResult);

当然,初步了解下来,宇润也发现了不少问题。

首先2.0版本在composer配置中设置了不再兼容php<5.6.4,但是经过实验,5.4版本依然能用。有相关需求的用户不要被这个版本限制吓到了。

然后就是hashids支持自定义字典,也就是生成出的编码允许使用哪些字符。这个自定义字典必须包含16个以上字符,否则会抛出异常。在当我把hashids代码中的判断注释后测试发现依然能编码解码没毛病。

只能说问题还是不少的,有相关需求的用户可以fork后自行修改代码。总的来说hashids还是很不错的!

github:https://github.com/ivanakimov/hashids.php

composer:hashids/hashids

继续阅读
本文章来自站群哥LsevenTT博客~转载请注明出处
用PHP根据IP地址判断访问者所在省份,显示不同内容 PHP相关

用PHP根据IP地址判断访问者所在省份,显示不同内容

  在进行网站开发的过程中,有时候我们需要获取访问者的IP地址,根据访问者的IP地址,判断他所在的省份,然后呈现给访问者不同的内容。下面我们介绍一下使用淘宝的IP库来实现对指定省份显示指定内容的方法。 代码如下: <?php...
php根据ip段控制显示广告 PHP相关

php根据ip段控制显示广告

  以下代码是 PHP根据IP段控制显示广告   <?php function getIP() { $realip = ''; //设置默认值 if (isset($_SERVER)) { $realip = $_...
PHP模拟百度URL加密解密算法 PHP相关

PHP模拟百度URL加密解密算法

PHP模拟百度URL加密解密算法的代码如下 <?php $time = time() . rand(1000, 9999); $data = "{$time}###https://www.lseventt.com"; // 被加密信息...
PHP 获取指定日期的星期 PHP相关

PHP 获取指定日期的星期

PHP 获取指定日期的星期方法如下:   <?php header("Content-type: text/html; charset=utf-8"); //获取星期方法 function get_week($date){ ...