超级难题,在一个Web系统中,怎样产生7为数字。使各个用户产生的都不重复

zengjd 2008-12-25 04:53:46
超级难题,在一个Web系统中,怎样产生7为数字。使各个用户产生的都不重复

这个数字是用来作为数据库中的ID的。不能重复。

(条件限制,不能用数据库中的自增字段)
...全文
129 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
超级难?
从何说起了?
wangping_li 2008-12-25
  • 打赏
  • 举报
回复
数据库的字段类型设置为:uniqueidentifier
程序中赋值:Guid id = Guid.NewGuid();
这样子就不会产生重复的
7位的话数据多了看你怎么办
alex_zs 2008-12-25
  • 打赏
  • 举报
回复

<script type="text/javascript">
<!--
function RndNum(n)
{
var rnd="";
for(var i=0;i<n;i++)
rnd+=Math.floor(Math.random()*10);
return rnd;
}
var now=new Date();
var bl=false;
var arr =new Array();
for (var j=0;j<1000;j++)
{

var v =RndNum(4);
arr.push(v);
for(var z = 0;z <arr.length-1;z++)
{
if(v == arr[z])
{
document.writeln(v+"---重复<br/>");
bl=true;
break;
}
}
if(!bl)
{
document.writeln(arr[j]+"<br/>");
}
bl=false;
}
var newnow=new Date();
N=newnow-now
alert("所用时间为:"+N+"毫秒")

//-->
</script>

经测试,当生成的数量>生成位数的阶乘时,就会出现重复。

例如RndNum(10),当for (var j=0;j<1000;j++)中J的值超过10*9*8*7*6*5*4*3*2*1时,就会重复。

takako_mu 2008-12-25
  • 打赏
  • 举报
回复
這個還好吧,第一種方法是用2樓說的循環。
第二種是將將0~9按順序排,然后洗牌,最后取前面七位就可以了。

第一種方法:

public static string CreatePassword()
{
string fullPassword = "0123456789";
int[] tempr = { -1, -1, -1, -1, -1, -1, -1, -1 };//糾正取不到0...
string retPassword = "";

DateTime d = DateTime.Now;
Random rnd = new Random(d.Millisecond);

for (int i = 0; i < 8; i++)
{
int r = rnd.Next(0, fullPassword.Length);//糾正取不到Z
for (int k = 0; k < tempr.Length; k++)
{
if (tempr[k] == r)
{
r = rnd.Next(0, fullPassword.Length);//糾正取不到Z
k = -1;//糾正第一個字符竟然可以重復1次的BUG
}
}
tempr[i] = r;
}

for (int i = 0; i < 8 i++)
{
retPassword = retPassword + fullPassword.Substring(tempr[i], 1);
}
return retPassword;
}


第二種方法:
private string RandomList()
{
string str = "";
Random rand = new Random();
int[] a = new int[10];
for (int i = 0; i <= 9; i++)
{
a[i] = i;
}

for (int i = 9; i >= 1; i--)
{
swap(ref a[i], ref a[rand.Next(1, 100) % i]);
}

for (int m = 0; m < 10; m++)
{
str += a[m];
str += ",";
}
return str;
}

private void swap(ref int a,ref int b)
{
int temp = a;
a = b;
b = temp;
}
SATAN1122 2008-12-25
  • 打赏
  • 举报
回复
用一个文件记录数字,然后做自增····
zengjd 2008-12-25
  • 打赏
  • 举报
回复
取得不到数据库中的值
gtiroy 2008-12-25
  • 打赏
  • 举报
回复
判读数据库中最大值,之后加1 ,转换成7位数字。就可以了。

oracle中可以用序列
jiang_jiajia10 2008-12-25
  • 打赏
  • 举报
回复

Random r=new Random();
List <int> list=new List <int>();
for(int i=0;i <=7;i++)
list.Add(r.Next(1,50));
vrhero 2008-12-25
  • 打赏
  • 举报
回复
用GUID...7位数字不到千万级,假如你的用户多数据量大的话很快就用完了...
archu 2008-12-25
  • 打赏
  • 举报
回复
随机产生7位数,同时到数据库里查询一下是否已经存在。
满衣兄 2008-12-25
  • 打赏
  • 举报
回复
/// <summary>
/// 获取随机字符串根据guid生成
/// </summary>
/// <param name="len">不能大于36</param>
/// <returns></returns>
public static string GetGuidRandom(int len)
{
string strSep = ",";
string strChar = "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,-";
string intChar = "0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6";
char[] chrSep = strSep.ToCharArray();
char[] intSep = strSep.ToCharArray();
string[] aryChar = strChar.Split(chrSep, strChar.Length);
string[] aryInt = intChar.Split(intSep, intChar.Length);
string guid = System.Guid.NewGuid().ToString();
for(int i =0;i<aryChar.Length;i++)
{
guid=guid.Replace(aryChar[i],aryInt[i]);
}
return guid.Substring(0,len);
}
simen_frankly 2008-12-25
  • 打赏
  • 举报
回复
使用时间就是了,小时分秒毫秒,当用户提交时,记录时间就可以了

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧