适用于在Postgres 9和Java中唯一标识一系列数字的校验和

时间:2018-07-10 12:32:19

标签: java postgresql checksum

给出一系列数字(通常少于20个数字,值在100到1000之间,但不一定)

例如 100、343、234、123、456、345、80、99、100

什么是良好的校验和,以最大程度地减少提供相同校验和的不同数字序列的风险(不同阶数对于不同数字很重要)。

寻找PostgreSQL 9和Java中可用的校验和

2 个答案:

答案 0 :(得分:3)

我建议转换为带分隔符的字符串,然后在Postgres中使用MD5()在Java中使用java.security.MessageDigest / getInstance(“ MD5”)。

答案 1 :(得分:0)

在这里,我认为数组是最简单的解决方案:

db=# select '{2,4,5}'::int[] = '{2,4,5}'::int[];
 ?column?
----------
 t
(1 row)

db=# select '{2,4,5}'::int[] = '{2,5,4}'::int[];
 ?column?
----------
 f
(1 row)

虽然我认为这里不需要校验和,因为您可以直接操作整数数组,如上所示-数组是一个值。但是,如果需要散列,则可以将其强制转换为文本并使用md5:

db=# select md5('{2,4,5}'::int[]::text) = md5('{2,5,4}'::int[]::text);
 ?column?
----------
 f
(1 row)

但是再次。如果我理解正确,则需要散列,以便可以比较序列。 Postgres允许您不进行散列操作-使用本机数据类型integer[]-整数数组,显然数组的顺序很重要...