当然这两个是唯一的,不能有重复!
大家有好什么的思路吗?
13 个解决方案
#1
guid
根据最大值+时间等生成号码
根据最大值+时间等生成号码
#2
C#中的随机函数
System.Random r = new Random();
int yourandom = r.Next(0,100) //0到100之间的整型随机数
// C#随机生成数字、字母 (公用类)
产生62位内任意数字大小写字母的随机数
private static char[] constant=
{
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
};
public static string GenerateRandom(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
Random rd= new Random();
for(int i=0;i<Length;i++)
{
newRandom.Append(constant[rd.Next(62)]);
}
return newRandom.ToString();
}
将生成的随机数最好用数据库存储一下
每次生成到库里判断一下是否存在
select coutn(1) from tb where id=随机数
#3
可以参考下生成身份证号的方法。
#4
个人感觉GUID还是比较靠铺
#5
用GUID作为主键列,重复的自然就不能插入了
#6
MD5编码也可以的~~~
#7
变量数组
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(Environment.TickCount); 获取无重复的数据
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(Environment.TickCount); 获取无重复的数据
#8
不知道你在什么地方使用,如果是在一些没有字母的输入键的地方使用,那就麻烦
那就建议使用一个线性的方程式,或者抛物线(只使用一侧)
这样产生的数字也是唯一的
那就建议使用一个线性的方程式,或者抛物线(只使用一侧)
这样产生的数字也是唯一的
#9
就是在购物网站中用的,
生成出来的像:5020365391994185848
boss就太长了!
用
生成出来的像:aded0a2611f8aa4a
boss也说这样不好,数据与字母没有分隔符,不好
汗啊
private long GenerateId()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt32(buffer, 0);
}
生成出来的像:5020365391994185848
boss就太长了!
用
private string GenerateId(string flag)
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
生成出来的像:aded0a2611f8aa4a
boss也说这样不好,数据与字母没有分隔符,不好
汗啊
#10
GUID有分割呀
#11
如果只是编号问题,可以这样:1010070070002423
前6位是日期,之后四位是券的类型编号(例如其中涵盖了厂商编号),最后6位是某日期、某券类型之下所产生的券的顺序流水号。
前6位是日期,之后四位是券的类型编号(例如其中涵盖了厂商编号),最后6位是某日期、某券类型之下所产生的券的顺序流水号。
#12
当然如果要缩短,年月日可以用三位字符/数字来产生(因为字母加数字可以表示36个值,足够表示日),然后是5位流水号(流水号每日都从1号重新编码),这样就使用8个字符就行了。
#13
这个比较靠谱。
sql区问会有更多答案。
sql区问会有更多答案。
#1
guid
根据最大值+时间等生成号码
根据最大值+时间等生成号码
#2
C#中的随机函数
System.Random r = new Random();
int yourandom = r.Next(0,100) //0到100之间的整型随机数
// C#随机生成数字、字母 (公用类)
产生62位内任意数字大小写字母的随机数
private static char[] constant=
{
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
};
public static string GenerateRandom(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
Random rd= new Random();
for(int i=0;i<Length;i++)
{
newRandom.Append(constant[rd.Next(62)]);
}
return newRandom.ToString();
}
将生成的随机数最好用数据库存储一下
每次生成到库里判断一下是否存在
select coutn(1) from tb where id=随机数
#3
可以参考下生成身份证号的方法。
#4
个人感觉GUID还是比较靠铺
#5
用GUID作为主键列,重复的自然就不能插入了
#6
MD5编码也可以的~~~
#7
变量数组
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(Environment.TickCount); 获取无重复的数据
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(Environment.TickCount); 获取无重复的数据
#8
不知道你在什么地方使用,如果是在一些没有字母的输入键的地方使用,那就麻烦
那就建议使用一个线性的方程式,或者抛物线(只使用一侧)
这样产生的数字也是唯一的
那就建议使用一个线性的方程式,或者抛物线(只使用一侧)
这样产生的数字也是唯一的
#9
就是在购物网站中用的,
生成出来的像:5020365391994185848
boss就太长了!
用
生成出来的像:aded0a2611f8aa4a
boss也说这样不好,数据与字母没有分隔符,不好
汗啊
private long GenerateId()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt32(buffer, 0);
}
生成出来的像:5020365391994185848
boss就太长了!
用
private string GenerateId(string flag)
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
生成出来的像:aded0a2611f8aa4a
boss也说这样不好,数据与字母没有分隔符,不好
汗啊
#10
GUID有分割呀
#11
如果只是编号问题,可以这样:1010070070002423
前6位是日期,之后四位是券的类型编号(例如其中涵盖了厂商编号),最后6位是某日期、某券类型之下所产生的券的顺序流水号。
前6位是日期,之后四位是券的类型编号(例如其中涵盖了厂商编号),最后6位是某日期、某券类型之下所产生的券的顺序流水号。
#12
当然如果要缩短,年月日可以用三位字符/数字来产生(因为字母加数字可以表示36个值,足够表示日),然后是5位流水号(流水号每日都从1号重新编码),这样就使用8个字符就行了。
#13
这个比较靠谱。
sql区问会有更多答案。
sql区问会有更多答案。