我正在尝试找到一种将长字符串ID(例如“ T2hR8VAR4tNULoglmIbpAbyvdRi1y02rBX”)转换为数字ID的方法。
我考虑过获取每个数字的ASCII值,然后将它们相加,但是我认为这不是一个好方法,因为不同的数字可以具有相同的结果,例如,“ ABC”和“ BAC”将结果相同
A = 10,B = 20,C = 50,
ABC = 10 + 20 + 50 = 80
BAC = 20 + 10 + 50 = 80
我还考虑过获取每个字母的ASCII码,然后将数字彼此相邻设置,例如“ ABC”
所以ABC = 102050
此方法无法正常工作,因为拥有20个字母的字符串会产生大量数字,那么如何解决此问题?先感谢您。
答案 0 :(得分:0)
如果您需要100%确信没有可能的重复项,并且输入字符串的长度最多为20个字符,则您不能将ID存储为64位长。您将必须使用BigInteger:
val id = BigInteger(stringId.toByteArray())
到那时,我质疑将ID转换为数字格式是否有任何意义。字符串本身可以是ID。
答案 1 :(得分:0)
您可以使用hashCode()
功能。 "id".hashcode()
。所有对象都实现此功能的变体。
open fun hashCode(): Int
返回对象的哈希码值。
hashCode
的总合同为:只要在同一个对象上多次调用它,
hashCode
方法就必须始终返回相同的整数,前提是在该对象的equals
比较中使用的信息没有被修改。如果根据
equals()
方法两个对象相等,则在两个对象中的每个对象上调用hashCode
方法必须产生相同的整数结果。
默认情况下,所有平台对象都将其实现。如果您有很多ID,总是有可能重复。
如果您使用基于JVM的kotlin环境,则哈希将由
String.hashCode()
function来自JVM。