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

news/2025/2/12 19:39:28
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 的版本提升了百倍左右

performance comparison

其他

$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://dhexx.cn/news/show-3251591.html

相关文章

LVS负载均衡NAT和DR模式配置案列

NAT模式配置 配置示意图如下所示: LVS负载均衡服务器的配置 配置两块网卡,IP地址配置如下 安装LVS管理工具ipvsadm ipvaadm常用参数如下 添加虚拟服务器,指定算法为轮询: [rootlocalhost ~]# ipvsadm -A -t 192.168.153.1…

JAVA设计模式 — 简单工厂模式

定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。 类型:对象创建型模式 简单工厂模式 简单工厂模式是工厂方法模式的一个特例,通过简单工厂方法模式的类…

Leetcode_动态规划、迭代

目录连续子数组的最大和1 题目描述2 解题(java)2.1 动态规划解析2.2 空间复杂度降低2.3 Java代码3 复杂性分析回文子串1 题目描述2 解题(Java)2.1 动态规划法2.2 中心扩展法最短无序连续子数组1 题目描述2 解题(Java&a…

量子新法生成“真正随机”的数字

2019独角兽企业重金招聘Python工程师标准>>> 据美国国家标准与技术研究院(NIST)官网消息,该机构研究人员在12日出版的《自然》杂志上撰文指出,他们开发出一种新方法,可生成由量子力学保证的随机数字。新技术…

centos6 keepalived+lvs DR模式负载均衡高可用集群

1. 实验图如下: 2. WebServer的配置 2.1 在WebServer1 和WebServer2上安装Apache服务 并创建测试页面(server1和server2的测试页面不同,其他配置均相同),开启Apache服务 yum -y install httpd2.2 创建不同的测试页面…

JAVA设计模式 —工厂方法模式(Factory Method)

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 类型:对象创建型模式 类图: Product:定义工厂方法所创建的对象的接口,也就是实际需要使用…

CString,string和char*

CString是MFC中的 标准C中没有string,有string.h头文件,其中是strcpy,strcmp等函数。但操作对象都是char*类型 string是C中封装的 转化:LPCSTR char* char*与string: char *ch str.c_str(); char* ch str.data(); string s1 c…

LVS结合keepaslived、memcached综合实验

实验逻辑图如下: 注意:所有服务器做实验之前均关闭防火墙和selinux,操作如下 各服务器配置如下: webserver1的配置 操作系统:centos7 安装Apache服务和所需的环境 将电商包上传并解压到 /var/www/html/ 目录下 开…

Leetcode_树、堆

目录合并二叉树1 题目描述2 解题(Java)3 复杂性分析二叉树的直径1 题目描述2 解题(Java)3 复杂性分析把二叉搜索树转换为累加树1 题目描述2 解题Java3 复杂性分析路径总和 III1 题目描述2 解题(Java)3 复杂…

JAVA设计模式 — 抽象工厂模式(Abstract Factory)

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 类型:对象创建型模式 类图: AbstractFactory:抽象工厂,定义创建一系列产品对象的操作接口。ConcreteFactory:具体…