资讯专栏INFORMATION COLUMN

一个 PHP 扩展: 根据数字生成唯一的字符串 ID

G9YH / 2227人阅读

摘要:是一个可以生成唯一的非顺序的字符串号码,它还可以对这些进行解密,你可以利用它来加密你不想暴露给用户的数字。安装你可以设置一些选项在里,或者你也可以在构造方法里面设置,但是我推荐你在中设置,这样你可以拥有更好的性能。

Hashids 是一个可以生成唯一的非顺序的字符串 ID 号码,它还可以对这些 ID 进行解密,你可以利用它来加密你不想暴露给用户的数字 ID。
安装
$ git clone https://github.com/cdoco/hashids.phpc.git
$ cd hashids.phpc
$ phpize && ./configure && make && make install

你可以设置一些选项在 php.ini 里,或者你也可以在构造方法里面设置,但是我推荐你在 php.ini 中设置,这样你可以拥有更好的性能。

[hashids]
extension=hashids.so

//默认是空字符串
hashids.salt=cdoco

//默认长度是 0
hashids.min_hash_length=20

//默认是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
//你可以自己设置它,比如你使用全部小写的字符
hashids.alphabet=abcdefghijklmnopqrstuvwxyz
快速开始
$hashids = new Hashids();

$hash = $hashids->encode(1, 2, 3, 4, 5); // ADf9h9i0sQ
$numbers = $hashids->decode($hash); // [1, 2, 3, 4, 5]

//或者你可以用静态方法调用
$hash = Hashids::encode(1, 2, 3, 4, 5); // ADf9h9i0sQ
$numbers = Hashids::decode($hash); // [1, 2, 3, 4, 5]
性能

原来有纯 php 代码实现的一个功能,现在把它封装成了一个 php 扩展,性能比纯 php 的版本提升了百倍左右

其他
$hashids = new Hashids();

$hash = $hashids->encode(1, 2, 3, 4, 5); // ADf9h9i0sQ
$hash = $hashids->encode([1, 2, 3, 4, 5]); // ADf9h9i0sQ

构造方法的参数

new Hashids(string $salt, int $min_hash_length, string $alphabet);

//example
new Hashids("this is salt.", 20, "abcdefghijklmnopqrstuvwxyz");

16 进制加密和解密

$hashids = new Hashids();

$hash = $hashids->encodeHex("FFFFDD"); // rYKPAK
$hex = $hashids->decodeHex($hash); // FFFFDD

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28605.html

相关文章

  • PHP和Python生成短链接服务符串ID

    摘要:使用进制也能生成比较短的字符串唯一,不过还有更好的解决方案,你也看到了上面短链接的唯一里还包含大写字母。接下来我们使用进制转换,将一个十进制数字转化为对应的进制表示。一亿用进制表示出来后的结果是生成的唯一字符串足够短。 假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的...

    苏丹 评论0 收藏0
  • PHP和Python生成短链接服务符串ID

    摘要:使用进制也能生成比较短的字符串唯一,不过还有更好的解决方案,你也看到了上面短链接的唯一里还包含大写字母。接下来我们使用进制转换,将一个十进制数字转化为对应的进制表示。一亿用进制表示出来后的结果是生成的唯一字符串足够短。 假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的...

    int64 评论0 收藏0
  • php唯一ID生成相关事宜

    摘要:原文地址唯一的生成并不是一件小事想说爱它也并不是像简单来一个这样一件容易的事为什么要唯一数据库的自增在分库的时候会是一场灾难假设分两个库因为每个库都会开始从开始自增届时系统中将会出现两个为的用户自增会暴露用户量或者其他业务量自增会让有心者 [原文地址:https://blog.ti-node.com/blog...] 唯一ID的生成并不是一件小事 , 想说爱它 , 也并不是像简单来一个...

    pepperwang 评论0 收藏0
  • Mongodb 中 _id 和 ObjectId

    摘要:和中存储的文档必须有一个键。这是的创建方式导致的。由于时间戳在前,这意味着大致会按照插入的顺序排列。前字节保证了同一秒钟不同机器不同进程产生的是唯一的。如果驱动程序允许服务器生成,那么将需要单独的查询,以确定插入的文档中的值。 _id和ObjectId MongoDB 中存储的文档必须有一个_id 键。这个键的值可以是任何类型的,默认是个ObjectId 对象。在一个集合里面,每个文档...

    xfee 评论0 收藏0
  • MongoDB指南---3、MongoDB基础知识-数据类型

    摘要:如将构造函数作为函数进行调用即不包括的方式,返回的是日期的字符串表示,而非日期对象。如果不注意这一点,没有始终使用日期构造函数,将得到一堆混乱的日期对象和日期的字符串。关于日期类的完整解释,以及构造函数的参数格式,参见规范节。 上一篇文章:MongoDB指南---2、MongoDB基础知识-文档、集合、数据库、客户端下一篇文章:MongoDB指南---4、MongoDB基础知识-使用M...

    aervon 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<