使用具有单个输入字符串/模式的算法生成多个唯一ID

时间:2013-07-11 11:52:51

标签: java algorithm

是否有任何算法或api用单个输入字符串/模式生成多个唯一ID,因此如果我们输入任何结果ID,它应该匹配模式/字符串(即,我们可以根据输入验证结果ID图案/字符串)

有什么想法吗?

3 个答案:

答案 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,它们会比较输入的字符串。