【Delphi】最新版中新功能:Sqids 数字生成短的唯一标识符

发布时间:2023年12月22日

目录

一、需要引用的单元:

二、具体对象说明:

1. 对象创建函数:

2. 对象编码函数:

3. 对象解码函数:

三、示例:

1. 简单调用示例:

2. 全功能示例:

四、用途:

????????适用于

????????不适用于

五、资源连接:


????????在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

文章来源:https://blog.csdn.net/sensor_WU/article/details/135144374
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。