FEISTEL_OBFUSCATE
在保持位长度和值基数不变的情况下,对整数(例如 ID 或电话号码)进行确定性混淆,从而使 JOIN 仍然可用。
语法
FEISTEL_OBFUSCATE( <number>, <seed> )
参数
返回类型
与输入相同
示例
SELECT feistel_obfuscate(10000,1561819567875);
+------------------------------------------+
| feistel_obfuscate(10000, 1561819567875) |
+------------------------------------------+
| 15669 |
+------------------------------------------+
feistel_obfuscate 会保留原始输入的位数。如果需要映射到更大的范围,可以在原始输入上增加一个偏移,例如 feistel_obfuscate(n+10000,50)
SELECT feistel_obfuscate(10,1561819567875);
+------------------------------------------+
| feistel_obfuscate(10, 1561819567875) |
+------------------------------------------+
| 13 |
+------------------------------------------+
电话号码风格示例(seed = 4242):
SELECT 13000000000 + number AS phone,
feistel_obfuscate(13000000000 + number, 4242) AS masked_phone
FROM numbers(5);
-- Sample output
+-------------+--------------+
| phone | masked_phone |
+-------------+--------------+
| 13000000000 | 12221668677 |
| 13000000001 | 10245458699 |
| 13000000002 | 15398657780 |
| 13000000003 | 9910824758 |
| 13000000004 | 13299971128 |
+-------------+--------------+