【Delphi】最新版中新功能:Sqids 数字生成短的唯一标识符
目录
????????在Delphi的最新版本12(Athens) 中,新引进了开源库:sqids。Sqids是一个小型的开源库,可以从数字生成短、唯一、看起来随机的ID。用于链接缩短,为日志生成唯一事件ID,为网站上的产品/对象生成ID(就像YouTube为视频所做的那样),为文本消息生成短ID,邮件确认代码等。
在Delphi中的使用:
一、需要引用的单元:
????????System.NetEncoding.Sqids
二、具体对象说明:
????????TSqidsEncoding
????????提供使用 Sqids 从数字中编码和解码 YouTube 外观 ID 的方法。生成的 ID 很短,可以从自定义字母生成,并保证无碰撞。
1. 对象创建函数:
constructor Create(const AAlphabet: string = ''; AMinHashLength: Integer = 0;
const ABlockList: TArray<string> = nil);
????????创建 TSqidsEncoding 的新实例。
????????创建接受以下参数:?
- ????????AAlphabet(字母表): 可选的编码字母。默认值为空字符串,这将导致使用 Sqids 默认字母表("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")。
- ????????AMinHashLength: 编码值的最小字符串长度。默认值为 0,即没有下限。
- ????????ABlockList: 编码值的阻塞字符串列表。默认值为空数组,这将导致使用已知脏话列表,而这些脏话可能不适合意外出现在自动生成的 Sqids ID 中。
2. 对象编码函数:
function Encode(const ANumbers: TArray<Integer>): string; overload;
function Encode(const ANumber: Integer): string; overload;
function Encode(const ANumbers: string): string; overload;
????????编码指定的输入值并返回 Sqids "散列 "字符串值。
????????编码接受三种数据类型作为参数:?
????????ANumbers: TArray<Integer>(即整数数组)。
????????ANumber:整数(即单个整数值)。
????????ANumbers: 字符串(即用逗号分隔的整数值字符串)。
注意:
????????当参数为负整数时,Encode 会引发异常。
3. 对象解码函数:
function Decode(const AHash: string): TArray<Integer>;
function DecodeSingle(const AHash: string): Integer;
function DecodeToStr(const AHash: string): string;
????????Decode 解码 Sqids 编码字符串并返回一个整数数组。AHash 是编码字符串的参数。
注意:
????????当 AHash 包含无效值时,生成的数组只包含第一个成功解码的整数值。所有其他值都将被丢弃。
????????DecodeSingle?解码 Sqids 编码字符串并返回整数。AHash 是编码字符串的参数。
注意:
????????当 AHash 包含无效参数或编码值个数不同于 1 时,DecodeSingle 会引发异常。 要解码多个编码值,请使用 Decode。
????????DecodeToStr?解码 Sqids 编码字符串,并返回一个以逗号分隔的整数值字符串。AHash 是编码字符串的参数。
注意:
????????当 AHash 包含无效参数时,DecodeToStr 会引发异常。
三、示例:
1. 简单调用示例:
procedure Sqids_Test;
begin
var length := 10; //编码值的最小字符串长度 10
var alphabet := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var sqids := TSqidsEncoding.Create(alphabet, length);
var encoded := sqids.Encode(71004); // 编码结果为 'HrqXVtlDrO'
var decodedSingle := sqids.DecodeSingle(encoded); // 解码为一个整数: 710054
var decoded := sqids.Decode(encoded); // 结果将返回一个数组: [710054]
Sqids.Free;
end;
2. 全功能示例:
注意使用以上程序时一定要打开:Skia开关!否则程序执行会出现错误!
四、用途:
????????Sqids 的主要用途是纯视觉的。如果您想在项目中使用标识符代替数字,Sqids 可能是一个不错的选择。
????????适用于
- 编码主键?如果使用关系型数据库
- 节省数据库查询?通过编码多个对象
- 临时登录令牌?无粗话,URL 安全
????????不适用于
- 敏感数据?这不是加密库
- 用户 ID?如果有人找到编码字母表,可以显示用户计数
五、资源连接:
1 . Delphi官网博客
2. Sqids
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!