Skip to content

Instantly share code, notes, and snippets.

@insidegui
Created June 2, 2013 00:30
Show Gist options
  • Save insidegui/5692177 to your computer and use it in GitHub Desktop.
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.
<?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