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

目录

一、需要引用的单元:

二、具体对象说明:

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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值