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