当前位置:编程学习 > C#/ASP.NET >>

求一个生成16位定长的数字的算法

算法要求
(1)要求生成一个16位定长的数字串,数字串由三部分组成。第一部分为定长的6位数字;第二部分为定长的8位数字,不足时在左侧补0;第三部分为定长的2位校验位,校验位的数字也可以由大家提供;
(2)要求采用该算法生成的数字串,当时生成的数字串不能与以往生成的数字串至少有2个数字不同。
数字串1:9876540000000510
数字串2:9876540000000610 (这是不符合要求的)
(3)不能借助数据库、文本文件等存储方式对历史数字串做逐一比较;
--------------------编程问答-------------------- 需要可逆吗? --------------------编程问答-------------------- 不需要可逆
引用 1 楼 gxingmin 的回复:
需要可逆吗?
--------------------编程问答--------------------
 
private string Get16String()
{
   return DateTime.Now.ToString("yyMMddHHmmssfff")+ (new Random().Next(9)).ToString();
}
--------------------编程问答-------------------- 需要效验呢。 --------------------编程问答-------------------- 这个没看明白“当时生成的数字串不能与以往生成的数字串至少有2个数字不同。” --------------------编程问答-------------------- lz的意思是生成的所有串,两两比较至少有2个位置不能相同 --------------------编程问答-------------------- 这个没看明白“当时生成的数字串不能与以往生成的数字串相比至少有2个数字不同。”
引用 5 楼 catchdream 的回复:
这个没看明白“当时生成的数字串不能与以往生成的数字串至少有2个数字不同。”
--------------------编程问答-------------------- 补充要求:
(4)前6位必须是固定值。如:000000;
(5)必须要有2个校验位;


引用 3 楼 gxingmin 的回复:
C# code
?



12345

   private string Get16String() {    return DateTime.Now.ToString("yyMMddHHmmssfff")+ (new Random().Next(9)).ToString(); }
--------------------编程问答--------------------
        private string Get16String()
        {
            DateTime timeStamp = new DateTime(2012, 12, 21);
            long random = (DateTime.UtcNow.Ticks - timeStamp.Ticks)%(99999999);
            string A = DateTime.Now.ToString("yyMMdd");
            string B = random.ToString("D8");
            string tmp = A + B;
            byte[] buffer = Encoding.Default.GetBytes(tmp);
            int mod = 0, m = 0;
            for (int i = 0; i < buffer.Length; i++)
            {
                if ((i % 2) == 0)
                {
                    m = (buffer[i] - 30) * 3;
                }
                else
                {
                    m = (buffer[i] - 30) * 7;
                }
                mod += m;
            }
            string C = (mod % 99).ToString("D2");
            return A + B + C; 
        }
--------------------编程问答-------------------- long random = (DateTime.UtcNow.Ticks - timeStamp.Ticks) % (99999999);这句代码一定会生成唯一的8位数么?

引用 9 楼 leitwo 的回复:
C# code
?



123456789101112131415161718192021222324

        private string Get16String()         {             DateTime timeStamp = new DateTime(2012, 12, 21);             long random = (Date……
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,