Olá pessoal,
Bom dia!
Neste post rápido, vou demonstrar para vocês, como criar um pequeno gerador de senhas aleatórias, para ser utilizado das mais diversas formas. Vou disponibilizar esse script utilizando as linguagens C# (para utilizar no SQL Server, com o CLR), PHP e Transact-SQL.
Esses scripts são bem simples, mas a ideia é demonstrar como utilizar esse recurso nas 3 principais tecnologias que eu utilizo.
Como criar um gerador de senhas escrito em PHP
Código-fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?php function fncGera_Senha( $Qt_Caracteres, $Fl_Letras, $Fl_Maiusculas, $Fl_Numeros, $Fl_Simbolos ) { if ( $Qt_Caracteres == 0 ) { return null; } if ( !$Fl_Letras && !$Fl_Numeros && !$Fl_Simbolos ) { return null; } $caracteresValidos = ""; if ( $Fl_Letras ) { $caracteresValidos .= "abcdefghijklmnopqrstuvwxyz"; } if ( $Fl_Letras && $Fl_Maiusculas ) { $caracteresValidos .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; } if ( $Fl_Numeros ) { $caracteresValidos .= "1234567890"; } if ( $Fl_Simbolos ) { $caracteresValidos .= "!@#$%&*()_+-={}/\<>?§£¢¬|.,;:"; } $valormaximo = strlen( $caracteresValidos ); $senha = ""; for ( $i = 0; $i < $Qt_Caracteres; $i++ ) { $senha .= $caracteresValidos[rand( 0, $valormaximo - 1 )]; } return $senha; } echo "Exemplo 1: " . fncGera_Senha(10, 1, 1, 1, 1) . "<br/>"; echo "Exemplo 2: " . fncGera_Senha(8, 1, 0, 1, 0) . "<br/>"; echo "Exemplo 3: " . fncGera_Senha(4, 1, 1, 0, 0) . "<br/>"; |
Como criar um gerador de senhas escrito em C# (com CLR)
Código-fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Text; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static string fncGera_Senha(int Qt_Caracteres, bool Fl_Letras, bool Fl_Maiusculas, bool Fl_Numeros, bool Fl_Simbolos) { if (Qt_Caracteres == 0) return null; if (!Fl_Letras && !Fl_Numeros && !Fl_Simbolos) return null; var caracteresValidos = ""; if (Fl_Letras) caracteresValidos += "abcdefghijklmnopqrstuvwxyz"; if (Fl_Letras && Fl_Maiusculas) caracteresValidos += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (Fl_Numeros) caracteresValidos += "1234567890"; if (Fl_Simbolos) caracteresValidos += @"!@#$%&*()_+-={}/\<>?§£¢¬|.,;:?"; var valormaximo = caracteresValidos.Length; var random = new Random(DateTime.Now.Millisecond); var senha = new StringBuilder(Qt_Caracteres); for (var i = 0; i < Qt_Caracteres; i++) senha.Append(caracteresValidos[random.Next(0, valormaximo)]); return senha.ToString(); } } |
Como criar um gerador de senhas escrito em Transact-SQL (TSQL)
Código-fonte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
CREATE FUNCTION dbo.fncGera_Senha( @Qt_Caracteres INT, @Fl_Letras BIT, @Fl_Maiusculas BIT, @Fl_Numeros BIT, @Fl_Simbolos BIT ) RETURNS VARCHAR(MAX) AS BEGIN IF (@Qt_Caracteres = 0) RETURN NULL IF (@Fl_Letras = 0 AND @Fl_Numeros = 0 AND @Fl_Simbolos = 0) RETURN NULL DECLARE @caracteresValidos VARCHAR(MAX) = '' IF (@Fl_Letras = 1) SET @caracteresValidos += 'abcdefghijklmnopqrstuvwxyz' IF (@Fl_Letras = 1 AND @Fl_Maiusculas = 1) SET @caracteresValidos += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' IF (@Fl_Numeros = 1) SET @caracteresValidos += '1234567890' IF (@Fl_Simbolos = 1) SET @caracteresValidos += '"!@#$%&*()_+-={}/\<>?§£¢¬|.,;:?' DECLARE @valormaximo INT = LEN(@caracteresValidos), @i INT = 1, @Senha VARCHAR(MAX) = '' WHILE(@i <= @Qt_Caracteres) BEGIN -- Não é permitido utilizar a função RAND() dentro de UDF. Ou se cria uma view com a função RAND() ou utiliza a solução abaixo SET @Senha += SUBSTRING(@caracteresValidos, CAST(((ABS(CHECKSUM(PWDENCRYPT(N''))) / 2147483647.0) * @valormaximo) + 1 AS INT), 1) SET @i += 1 END RETURN @senha END |
Como vocês podem ter observado no comentário da função, não é possível utilizar a função RAND() dentro de funções UDF. Caso você tenta fazê-lo, o SQL Server irá retornar essa mensagem de erro:
Msg 443, Level 16, State 1, Procedure fncGera_Senha, Line 50
Invalid use of a side-effecting operator ‘rand’ within a function.
Para contornar isso, veja mais acessando o post SQL Server – Msg 443 Invalid use of a side-effecting operator ‘rand’ within a function.
É isso aí, pessoal!
Espero que tenham gostado do post e até o próximo.
php c# csharp random strings passwords generator
php c# csharp random strings passwords generator