Pplware

PHP é à quinta-feira – Gerar uma password

Boas. A nível de direitos sobre o código, devo remeter-vos para o meu primeiro artigo desta rubrica.

Esta semana trago-vos um conjunto de funções que os ajudarão a gerar uma password (ou qualquer outra string de caracteres aleatórios).

A princípio pode-vos parecer muito grande e a verdade é que é possível reduzir a segunda função de outras formas, mas penso que esta é mais fácil de entender e personalizar.


<?php
function generatePassword($length = 8 ) {
    $pwd = '';
    if($length > 0) {
        for($i=0;$i<$length;$i++) {
            mt_srand((double)microtime() * 1000000);
            $x = mt_rand(1,65);
            $pwd .= assignValue($x);
        }
    }
    return $pwd;
} 

function assignValue($x) {
  switch($x) {
    case 1 : { $r = "a"; } break;
    case 2 : { $r = "b"; } break;
    case 3 : { $r = "c"; } break;
    case 4 : { $r = "d"; } break;
    case 5 : { $r = "e"; } break;
    case 6 : { $r = "f"; } break;
    case 7 : { $r = "g"; } break;
    case 8 : { $r = "h"; } break;
    case 9 : { $r = "i"; } break;
    case 10: { $r = "j"; } break;
    case 11: { $r = "k"; } break;
    case 12: { $r = "l"; } break;
    case 13: { $r = "m"; } break;
    case 14: { $r = "n"; } break;
    case 15: { $r = "o"; } break;
    case 16: { $r = "p"; } break;
    case 17: { $r = "q"; } break;
    case 18: { $r = "r"; } break;
    case 19: { $r = "s"; } break;
    case 20: { $r = "t"; } break;
    case 21: { $r = "u"; } break;
    case 22: { $r = "v"; } break;
    case 23: { $r = "w"; } break;
    case 24: { $r = "x"; } break;
    case 25: { $r = "y"; } break;
    case 26: { $r = "z"; } break;
    case 27: { $r = "0"; } break;
    case 28: { $r = "1"; } break;
    case 29: { $r = "2"; } break;
    case 30: { $r = "3"; } break;
    case 31: { $r = "4"; } break;
    case 32: { $r = "5"; } break;
    case 33: { $r = "6"; } break;
    case 34: { $r = "7"; } break;
    case 35: { $r = "8"; } break;
    case 36: { $r = "9"; } break;
    case 37: { $r = "A"; } break;
    case 38: { $r = "B"; } break;
    case 39: { $r = "C"; } break;
    case 40: { $r = "D"; } break;
    case 41: { $r = "E"; } break;
    case 42: { $r = "F"; } break;
    case 43: { $r = "G"; } break;
    case 44: { $r = "H"; } break;
    case 45: { $r = "I"; } break;
    case 46: { $r = "J"; } break;
    case 47: { $r = "K"; } break;
    case 48: { $r = "L"; } break;
    case 49: { $r = "M"; } break;
    case 50: { $r = "N"; } break;
    case 51: { $r = "O"; } break;
    case 52: { $r = "P"; } break;
    case 53: { $r = "Q"; } break;
    case 54: { $r = "R"; } break;
    case 55: { $r = "S"; } break;
    case 56: { $r = "T"; } break;
    case 57: { $r = "U"; } break;
    case 58: { $r = "V"; } break;
    case 59: { $r = "W"; } break;
    case 60: { $r = "X"; } break;
    case 61: { $r = "Y"; } break;
    case 62: { $r = "Z"; } break;
    case 63: { $r = "!"; } break;
    case 64: { $r = "?"; } break;
    case 65: { $r = "%"; } break;
  }
return $r;
}
?>

Modo de utilização:

Como sempre, é bastante simples e intuitivo, segue um exemplo de como gerar uma password com 8 caracteres e outra com 15.

<?php

$pwd1 =  generatePassword();

$pwd2 =  generatePassword(15);

?>

Nota: Se acrescentarem ou retirarem algum caracter do função assignValue(), lembrem-se de alterar o número máximo na função generatePassword() na linha onde tem “$x = mt_rand(1,65); ”.

Notem que para não haver problemas, convém que na função assignValue() os números sejam sequenciais, ou seja, que não salte de um número para outro que não o seguinte.

Qualquer dúvida ou sugestão, estão completamente à vontade.

Como vou entrar em exames (para a semana), etc., se quiserem enviar as vossas propostas para esta rubrica, agradeço, pois será difícil escrevê-la até ao final de Julho.

Exit mobile version