关于随机函数的问题!!

灰太狼已不再单身 2008-11-12 12:30:35
我想要用随机函数来生成点卡的卡号和密码,谁能帮我贴点代码出来,卡密的位数没要求,10位左右吧

随机函数生成的结果是字母数字混合最好!

大家贴代码最好把注释加上,不然我看不大懂的哦,一定要添加注释!
...全文
131 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
DateTime.Now.Year.ToString()
这个是获取当前年份的,我怎么在这个年份上加1年或者2年?
  • 打赏
  • 举报
回复


Random rd=new Random();
string newrd = rd.Next(1, 1000000000).ToString();
string newrd1 = rd.Next(1, 1000000).ToString();



我这个只是生成数字,感觉不是那么好
atpains 2008-11-12
  • 打赏
  • 举报
回复
string CodeSerial= "0,1,2,3,4,5,6,7,8,9,a,b,c,e,f,g";//字符,(使用逗号分隔)

#region 生成随机字符码
public string CreateVerifyCode(int codeLen) //codeLen 要生成字符的位数
{
string[] arr = CodeSerial.Split(',');

string code = "";

int randValue = -1;

Random rand = new Random(unchecked((int)DateTime.Now.Ticks));

for (int i = 0; i < codeLen; i++)
{
randValue = rand.Next(0, arr.Length - 1);

code += arr[randValue];
}

return code;
}
#endregion
gengwanshanreally 2008-11-12
  • 打赏
  • 举报
回复
1楼的方法行!
cqdyh 2008-11-12
  • 打赏
  • 举报
回复
大家分析得都在理, GUID 是不错的选择
gjfizx 2008-11-12
  • 打赏
  • 举报
回复
baidu一搜一堆,什么样的都有
满衣兄 2008-11-12
  • 打赏
  • 举报
回复
根据时间也是个不错的选择,这个sleep很重要,但是要注意一下时差,如果是N多地方都可以使用就要注意了,可以换算成标准时间在生成。
满衣兄 2008-11-12
  • 打赏
  • 举报
回复
理论上一台机器上的guid会3240年重复一次,所以不用担心重复现象,用下面的方法有可能重复,但是出现重复的概率绝对很小,至少比random出现重复的概率小,如果把位数取满3240年内是不会重复的。我做过一个系统里面要随机生成16位的卡号,用的就是这个方法。


/// <summary>
/// 获取随机字符串根据guid生成
/// </summary>
/// <param name="len">注意一下len的长度,这个我没测试最大长度,不过10位肯定够了</param>
/// <returns></returns>
public static string GetGuidRandom(int len)
{
string guid = System.Guid.NewGuid().ToString();
guid=guid.Replace("-","");
return guid.Substring(0,len);
}
满衣兄 2008-11-12
  • 打赏
  • 举报
回复
如果是批量生成,直接用Random会出现上下重复的现象。推荐根据Guid来生成。
/// <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);
}

这个方法生成的是纯数字组合,如果要生成数字和字母组合更容易,因为guid本身就是数字、字母、下划线的组合,所以只要这样把下划线replace就好了。
/// <summary>
/// 获取随机字符串根据guid生成
/// </summary>
/// <param name="len">注意一下len的长度,这个我没测试最大长度,不过10位肯定够了</param>
/// <returns></returns>
public static string GetGuidRandom(int len)
{
string guid = System.Guid.NewGuid().ToString();
guid=guid.Replace("-","");
return guid.Substring(0,len);
}

yoursWTR 2008-11-12
  • 打赏
  • 举报
回复
随机数怎么可能来做点卡
zlb789 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lifueng 的回复:]
C# code

Random rd=new Random();
string newrd = rd.Next(1, 1000000000).ToString();
string newrd1 = rd.Next(1, 1000000).ToString();





我这个只是生成数字,感觉不是那么好
[/Quote]
可以把这里生成的数字 ,根据特定条件 转换成ascii 不就是字符了

觉得 string s = Guid.NewGuid().ToString().Replace("-", "").SubString(0,10); 这个不错
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiezi316 的回复:]
using System.Threading;

Thread.Sleep(1);单位毫秒
[/Quote]



Thread.Sleep(1); 是放在FOR循环里面的吧
liuhelong 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiezi316 的回复:]
上面的方法都可以
但补充1点
调用取随即数的方法时最好sleep一下,不然你会发现生成的卡密会出现一样的情况。
因为RANDOM是伪随即数,实际上是按照时间为种子来取的,当你用FOR循环连续生成的时候就会出现每隔一部分随机数是一样的情况。
[/Quote]

有理
  • 打赏
  • 举报
回复

一个ImageButton 有两个图片作为背景,

点击后在这两个图片之间互换是设置什么?
accomp 2008-11-12
  • 打赏
  • 举报
回复
随机数:
string s = Guid.NewGuid().ToString().Replace("-", "").SubString(0,10);
ivmyzj 2008-11-12
  • 打赏
  • 举报
回复
可以考虑用日期进行加密..
accomp 2008-11-12
  • 打赏
  • 举报
回复
DateTime.Now.AddYears(2).ToString("yyyy年MM月dd日");
jiezi316 2008-11-12
  • 打赏
  • 举报
回复
using System.Threading;

Thread.Sleep(1);单位毫秒
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiezi316 的回复:]
上面的方法都可以
但补充1点
调用取随即数的方法时最好sleep一下,不然你会发现生成的卡密会出现一样的情况。
因为RANDOM是伪随即数,实际上是按照时间为种子来取的,当你用FOR循环连续生成的时候就会出现每隔一部分随机数是一样的情况。
[/Quote]



麻烦说下 sleep 怎么做,我学.net 没多久,很多东西都不晓得··
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chtsir 的回复:]

DateTime.Now.AddYears(2).Year.ToString();
[/Quote]

用那个now.addyears(2)后的结果

2010-11-12 13:28:31

我想让其中的 - 变成 年,月,日,

然后不要后面的时间,怎么做?难道要获取后读出来进行修改?
加载更多回复(6)

62,039

社区成员

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

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

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

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