quinta-feira, 27 de agosto de 2009

Gerar Senhas Randomicas parte 2.

Esse código eu utilizava em uma Function para gerar senhas randomicas em algumas ocasiões no sistema.

Como parametro de entrada da function eu passava os itens abaixo e recebia lista de senhas como Table.

@GrupoBitMinuscula
@GrupoBitNumericos
@GrupoBitEspeciais
@GrupoBitDiferenci
@GrupoCharDiferenci
@QuantidadeSenha
@TamanhoSenha


Declare @GrupoCharMaiuscula VarChar(26),
@GrupoCharMinuscula VarChar(26),
@GrupoCharNumericos VarChar(10),
@GrupoCharEspeciais VarChar(26),
@GrupoCharDiferenci VarChar(Max)


Declare @GrupoBitMaiuscula Bit,
@GrupoBitMinuscula Bit,
@GrupoBitNumericos Bit,
@GrupoBitEspeciais Bit,
@GrupoBitDiferenci Bit

Declare @GrupoCharTotal VarChar(Max),

Declare @TextoSenha Table (dsSenha VarChar(Max))

Declare @tmpTextoSenha VarChar(Max)

Declare @TamanhoSenha Int,
@QuantidadeSenha Int

Set @QuantidadeSenha = 10 --Quantidade de senhas para serem geradas
Set @GrupoCharMaiuscula = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Set @GrupoCharMinuscula = 'abcdefghijklmnopqrstuvwxyz'
Set @GrupoCharNumericos = '1234567890'
Set @GrupoCharEspeciais = '!#%&()*+,-./:;<=>@[]^_{}~'
Set @GrupoCharDiferenci = ''

Set @GrupoBitMaiuscula = 1
Set @GrupoBitMinuscula = 1
Set @GrupoBitNumericos = 1
Set @GrupoBitEspeciais = 1
Set @GrupoBitDiferenci = 0

Set @GrupoCharTotal = Case when @GrupoBitMaiuscula = 1 Then @GrupoCharMaiuscula Else '' End +
Case when @GrupoBitMinuscula = 1 Then @GrupoCharMinuscula Else '' End +
Case when @GrupoBitNumericos = 1 Then @GrupoCharNumericos Else '' End +
Case when @GrupoBitEspeciais = 1 Then @GrupoCharEspeciais Else '' End +
Case when @GrupoBitDiferenci = 1 Then @GrupoCharDiferenci Else '' End

While @QuantidadeSenha > 0
Begin
set @tmpTextoSenha = ''

Set @TamanhoSenha = 15 --Tamanho da senha em Caracteres

While @TamanhoSenha > 0
Begin
Select @tmpTextoSenha = @tmpTextoSenha + SUBSTRING(@GrupoCharTotal , Cast((Len(@GrupoCharTotal) - 2) * RAND(CAST(NEWID() AS varbinary )) + 1 as int) , 1)
Set @TamanhoSenha = @TamanhoSenha - 1
End
Insert Into @TextoSenha Values (@tmpTextoSenha)
Set @QuantidadeSenha = @QuantidadeSenha - 1
End

Select * from @TextoSenha

Nenhum comentário:

Postar um comentário