日期:2014-05-18  浏览次数:20490 次

小妹请教如何生成九位的随机密码!
今天我接到一个任务,要生成一个九位的随机密码!

要数字0-9 字母 A-F

随机取这里面的字母和数字。只要九位。

请问各位前辈应该如何去做!我确实没做过这方面开发!

------解决方案--------------------
SQL code
--参考:
declare   @maxNumber   int,   --随机数最大值 
   @minNumber   int,   --随机数最小值 
                  @rows   int               --要取得的行数   
select   @maxNumber=10000, @minNumber=10000, 
                @rows=10   
    
set   rowcount   @rows   
    
select   distinct   '1234 4567 '+convert(varchar,ID)+' '+convert(varchar,ID)+' '+convert(varchar,ID)+' '+convert(varchar,ID)   as   'B'   
from   (    
                select   convert(int,rand(checksum(newid()))*@minNumber)   as   ID   
                from   syscolumns,sysobjects   
            )t   
    
set   rowcount   0 
-----------------------------------
declare     @num1     int ,@num2     int ,@num3     int ,@num4     int   
set @num1=rand(abs(convert(int,checksum(newid()))))*10000
set @num2=rand(abs(convert(int,checksum(newid()))))*10000
set @num3=rand(abs(convert(int,checksum(newid()))))*10000
set @num4=rand(abs(convert(int,checksum(newid()))))*10000   
select   convert(varchar(100),@num1)+' '+convert(varchar(100),@num2)+' '+convert(varchar(100),@num3)+' '+convert(varchar(100),@num4)
---------------------------------------
declare @r1 numeric (15,0),@r2 numeric (15,0)
SELECT @r1=RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) )*10000
print @r1

------解决方案--------------------
探讨
SQL code
1> select right(newid(),9);
2> go

------------------
738ED4F91

(1 行受影响)

------解决方案--------------------
SQL code

--把2楼的写成个函数

--见newid视图
create view v_newid as select [id] = newid()

--建函数,获取随即9位数据+字母密码
create function f_getRandPassword9()
returns varchar(9)
as
begin
    declare @result varchar(9)
    select @result = right(id,9) from v_newid;
    return @result;
end

--查询结果
select dbo.f_getRandPassword9()
--结果
/*
---------
357771BF6

(1 行受影响)
*/

------解决方案--------------------
select right(newid(),9) 最好,而且简单
------解决方案--------------------
可能重复的几率有多大呀。 很少遇到重复,不信你试试。
------解决方案--------------------
探讨
select right(newid(),9) 最好,而且简单

------解决方案--------------------
我的经验是,先设定一个字符串"0123456789ABCDEF",这个16位字母,
然后随机取一个字符,连续抽取9个随机字符拼成密码。
------解决方案--------------------
.NET code
/// <summary>
/// 生成长度为9的随机数
/// </summary>
/// <returns>随机数字(包括字母)</returns>
public string RandomCode()
{
//生成的单个随机数
int ii生成的随机数;
//生成的单个随机数经过运算转换成的字符
char cc单个字符;
//待生成的随机数(包括字母)
string ss随机数字 = String.Empty;
//随机数生成器
Random ooRandom = new Random();

for (int i = 0; i < 9; i++)
{
//生成长度为9的随机数
ii生成的随机数 = ooRandom.Next();
if (ii生成的随机数 % 2 == 0)
//纯数字
cc单个字符 = (char)('0' + (char)(ii生成的随机数 % 10));
else
//字母数字混合
cc单个字符 = (char)('A' + (char)(ii生成的随机数 % 26));
ss随机数字 += cc单个字符.ToString();