字符串长度在2到10位左右,包含小写字母与数字。
用hashCode()方法可能出现重复值。
有无其他方法?

解决方案 »

  1.   

    hashCode返回int -2^31->2^31-1 (-2147483648->2147483647)而10位字符 (10+26)^10=3656158440062976所以至少得是long -2^63->2^63-1 (-9223372036854775808->9223372036854775807)自己做一个hash算法吧
      

  2.   

    已有一些人员帐号,字母加数字的。现在整合新应用,需要转为整型提供给新应用。自己做hash如何保证不重复?算法学的不好 。。
      

  3.   

    用摘要算法就可以了吧,java 的安全包里有提供相关类的,具体不太清楚
      

  4.   

    在数据库中建一个表 create table t1( id int identity(1,1) not null, name varchar(100) null,primary key(id))
    然后把你说的那些帐号插入到这个表中,这样,数据库就自动生成一个ID,且肯定是不重复的,你看是不是能满足你的要求
      

  5.   

    我还是倾向于使用算法解决.因为每周要同步这些帐号.
    如果放到表里生成ID,下次增加或删除了一些帐号,需要对照该表才可以生成新ID.比较复杂.
    另外,中文名是否可以转成整型?
    3个字的名字加一位区分重名位,13位还是超出整型了.
      

  6.   

    victorppy(键盘上的鱼) ,必须保证每次转换都要得到同样的值.你的方法...
      

  7.   

    long m=0;
    long step=1;
    for(int i=0;i<s.length();i++)
    {
      char ch = s.charAt(i);
      //把ch转为整数
      int n = toInt(ch);
      m+=step+n;
      step *= 256; //要超过最大的n
    }
      

  8.   

    long m=0;
    long step=1;
    for(int i=0;i<s.length();i++)
    {
      char ch = s.charAt(i);
      //把ch转为整数
      int n = toInt(ch);
      m+=step*n;
      step *= 256; //要超过最大的n
    }
      

  9.   

    如果写hashCode()的话不大可能完全没有重复的。
    只能减少重复,不能消灭重复。
      

  10.   

    根据楼主的情况,我猜测是做帐号密码的存放这一类问题的算法.记住一个原则,加密算法的不可逆和加密后的可重复性!如果飞要唯一性,可将这个字符串的没一位按ASICC码转换(数字也看成字符),一位变三位不足前补零.再对数字串做加密算法
      

  11.   

    楼上的方法不错,我也刚刚想到,
    不过再对数字做加密算法不就又回不来了吗,
    如果只需要按照楼主的需求的话,直接采用asicc就可以了
      

  12.   

    每一位都按ascii转换,如果5位帐号不就3*15=15位了?况且我还有10位帐号的情况
    如何保证是整型?
    cu653的方法不知道可行否,试试
      

  13.   

    对呀,自己给hash表一个可以产生唯一数字的算法啊!
      

  14.   

    如果楼主的目的只是加密用户名密码,且没有什么找回遗失密码功能的情况,还是用MD5之类的信息摘要
    ,(当然如果字符串长度不定,摘要仍然可能重复,即使可能性非常小,可以忽略)否则信息摘要(包括hashCode)是不可逆的,与类似压缩/解压缩的加密/解密不同