Created
June 2, 2013 00:30
-
-
Save insidegui/5692177 to your computer and use it in GitHub Desktop.
Função para obter lista de números aleatórios usando a API do site random.org. Verifica a quota com o serviço e quando necessário usa números pseudo-aleatórios como fallback.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// retorna array contendo informacoes e um array de numeros aleatórios | |
// num -> quantidade de numeros que deve gerar | |
// amount -> número máximo que pode ser gerado | |
// force_pseudo -> não utilizar o serviço random.org e gerar números pseudo-aleatórios | |
function get_random_numbers($num, $amount, $force_pseudo=false) | |
{ | |
// verifica a quota do servidor com o random.org para ver se é seguro fazer uma requisição agora | |
$c_quota = curl_init("http://www.random.org/quota/?format=plain"); | |
curl_setopt($c_quota, CURLOPT_RETURNTRANSFER, true); | |
// número de bits sobrando na quota | |
$bits_left = (int)curl_exec($c_quota); | |
curl_close($c_quota); | |
// se não tiver muitos bits sobrando, melhor usar números pseudo-aleatórios | |
if($bits_left < 10000 || $force_pseudo) { | |
srand(microtime()*1000); | |
// gera os números pseudo-aleatórios | |
$numbers = array(); | |
for($i = 0; $i < $num; $i++) { | |
$numbers []= rand(0,$amount)."\n"; | |
} | |
return array("pseudo" => 1, "numbers" => $numbers); | |
} else { | |
// faz requisição ao serviço random.org para obter os números | |
$c = curl_init("http://www.random.org/integers/?num=$num&min=0&max=$amount&col=1&unique=on&base=10&format=plain&rnd=new"); | |
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); | |
$numbers = curl_exec($c); | |
$numbers = explode("\n", $numbers); | |
// remove elemento sobressalente do final do array | |
array_pop($numbers); | |
curl_close($c); | |
return array("pseudo" => 0, "numbers" => $numbers, "bits_left" => $bits_left); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment