前16位是时间精确到秒
后16位是随机生成数
希望哪位大侠能给个代码
我原来做的总会出现重复问题
        public string GenerateCheckCodeNum(int codeCount)
        {
            string str = string.Empty;
            long num2 = DateTime.Now.Ticks + this.rep;
            this.rep++;
            Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> this.rep)));
            for (int i = 0; i < codeCount; i++)
            {
                int num = random.Next();
                str = str + ((char)(0x30 + ((ushort)(num % 10)))).ToString();
            }
            return str;
        }

解决方案 »

  1.   

    我原来做的总会出现重复问题没用同步lock,DateTime.Now的不是有一个从好像是1883年到现在的秒数吗,不能用吗
      

  2.   

    现在我解决了这个重复的问题了!不过只是暂时解决··        public string GenerateCheckCodeNum(int codeCount)
            {
                string str = string.Empty;
                long num2 = DateTime.Now.Ticks + this.rep;
                this.rep++;
                Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> this.rep)));
                for (int i = 0; i < codeCount; i++)
                {
                    int num = random.Next();
                    str = str + ((char)(0x30 + ((ushort)(num % 10)))).ToString();
                }
                if (codeCount == 16)
                {
                    str = this.GenerateCheckCodeNum(8) + this.GenerateCheckCodeNum(8);
                    return str;
                }
                else
                return str;
            }
    谁还有更好的办法啊·····
      

  3.   

    何必那么幸苦啊
    创建一个guid把-去掉就32位.
      

  4.   

    前面的时间可以单独写, 后面的随机分开也单独写rand.next(1000000000000000,10000000000000000),然后相加 可以不?
    呵呵
      

  5.   

    数据库添加个 guid 字段,绝对不重复。
      

  6.   

    .....很复杂弄个guid不是可以省很多麻烦事