是否有任何算法或api用单个输入字符串/模式生成多个唯一ID,因此如果我们输入任何结果ID,它应该匹配模式/字符串(即,我们可以根据输入验证结果ID图案/字符串)
有什么想法吗?
答案 0 :(得分:1)
您可以使用不安全的哈希函数。你的单一模式"可以是哈希值。您的多个ID可以是传递给不安全哈希函数时给出该哈希值的任何输入。哈希函数需要不安全,因此您可以向后驱动它以生成新的ID。
例如,您的哈希可能只是将所有字节异或。如果您的单个模式是0x2A,则任何与该值异或的字符串都可以是ID。
您需要根据需要判断哈希函数的不安全程度。有许多加密不安全的哈希函数,可以使用不同程度的可逆性。
答案 1 :(得分:0)
static void saveTable(UUID h1, Object x,Hashtable ht)
{
if(ht.get(h1) == null)
{
ht.put(h1, x);
}
else
{
Object ref=h1;
Object ref2=new Object();
while(ref!=null)
{
if(ref!=null)
{
ref2=ref;
}
ref=ht.get(ref);
}
ht.put(ref2,x);
}
}
static ArrayList loadTable(UUID h1,Hashtable ht)
{
Object x=ht.get(h1);
Object ref=h1;
ArrayList al=new ArrayList();
if(ht.get(h1)!=null)
{
while(ref!=null)
{
if(ref!=h1)al.add(ref);
ref=ht.get(ref);
}
}
return al;
}
然后在主要:
public static void main(String[] args)
{
Hashtable ht=new Hashtable();
UUID h1=UUID.randomUUID();
UUID h2=UUID.randomUUID();
saveTable(h1, "this is",ht);
saveTable(h1, "inefficient",ht);
saveTable(h2, "but",ht);
saveTable(h2, "saves",ht);
saveTable(h2, "the day",ht);
saveTable(h2, "at least",ht);
Object[] al=loadTable(h1,ht).toArray();
Object[] al2=loadTable(h2,ht).toArray();
for(int i=0;i<al.length;i++)
{System.out.println(al[i]);}
for(int i=0;i<al2.length;i++)
{System.out.println(al2[i]);}
}
输出:
this is
inefficient
but
saves
the day
at least
当然我使用字符串作为目标,UUID作为键。您可以使用alter the methods接受字符串作为键,UUID作为目标。
答案 2 :(得分:0)
正如上面一个想法的答案是使用哈希表,创建自己的hash function,或者只使用Object.hashCode()。但请注意,您必须以某种方式处理碰撞。这意味着id并不总是唯一的,你必须处理这种情况。内置hashTable的Javas处理这个问题,因为如果有几个字符串在输入时获得相同的id,它们会比较输入的字符串。