目录
????????在Delphi的最新版本12(Athens) 中,新引进了开源库:sqids。Sqids是一个小型的开源库,可以从数字生成短、唯一、看起来随机的ID。用于链接缩短,为日志生成唯一事件ID,为网站上的产品/对象生成ID(就像YouTube为视频所做的那样),为文本消息生成短ID,邮件确认代码等。
在Delphi中的使用:
????????System.NetEncoding.Sqids
????????TSqidsEncoding
????????提供使用 Sqids 从数字中编码和解码 YouTube 外观 ID 的方法。生成的 ID 很短,可以从自定义字母生成,并保证无碰撞。
constructor Create(const AAlphabet: string = ''; AMinHashLength: Integer = 0;
const ABlockList: TArray<string> = nil);
????????创建 TSqidsEncoding 的新实例。
????????创建接受以下参数:?
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 会引发异常。
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 会引发异常。
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;
注意使用以上程序时一定要打开:Skia开关!否则程序执行会出现错误!
????????Sqids 的主要用途是纯视觉的。如果您想在项目中使用标识符代替数字,Sqids 可能是一个不错的选择。
1 . Delphi官网博客
2. Sqids