如何将电子邮件地址值转换为数字?

问题描述 投票:0回答:1

有什么方法可以将电子邮件地址值转换为数字吗?

上下文: 我的表中有一个 EmailAddress 列表,其中没有 ID,但我想从 EmailAddress 生成 ID,以便我可以使用关联的 ID 作为唯一标识符。

我不想生成随机数,目标是每次根据电子邮件值生成完全相同的数字,例如:

示例: 将“[email protected]”转换为始终“12345”

的 SQL 查询

将“[email protected]”转换为始终“10101”等的 SQL 查询...

是否有任何函数可以将EmailAddress(假设可以将其视为字符串)转换为数字?

sql database datatable casting type-conversion
1个回答
0
投票

有很多方法可以做到这一点,我认为更优雅的一种是将这些电子邮件视为密码并对其进行哈希处理。

哈希是使用数学函数将任意长度的输入转换为固定大小的文本字符串的过程。在 SQL 中,您可以使用

HASHBYTES
函数来实现此目的。

SQL Server 中的

HASHBYTES
函数可用于将字符串哈希为固定长度的二进制哈希码。该函数有两个参数:用于散列的算法和要散列的字符串。例如,您可以使用 SHA2_256 算法将电子邮件地址转换为 256 位哈希码。

以下是如何使用

HASHBYTES
函数将电子邮件地址转换为唯一号码的示例:

SELECT HASHBYTES('SHA2_256', '[email protected]') AS HashedEmail;

这将返回一个二进制哈希码。如果你想将这个二进制哈希码转换为数字,你可以将其转换为一个大整数,如下所示:

SELECT CAST('' AS XML).value('xs:hexBinary(sql:column("hash"))', 'BIGINT') AS HashedEmail
FROM   (SELECT HASHBYTES('SHA2_256', '[email protected]') AS hash) AS T;

此方法将为每个唯一的电子邮件地址提供一个唯一的编号,该编号将非常大,因为它基于 256 位哈希码。如果您需要较小的数字,则可以使用不同的哈希算法,或者可以截断哈希代码,但这会增加冲突的风险(不同的电子邮件地址哈希为相同的数字)。

P.S.:哈希过程是不可逆的,这意味着您无法从哈希值中检索原始电子邮件地址。

P.S.2:如果您使用正在使用的编程语言而不是 SQL 来执行此操作,您还可以对电子邮件进行哈希处理,并且可能会更轻松地获取号码。

© www.soinside.com 2019 - 2024. All rights reserved.