Niroj Adhikary
Niroj Adhikary

Reputation: 1835

How to generate x digit random number?

I have to generate 16 digit random number something like recharg card pin number.(including 0 at starting place) This is my code

function gen_num($len) {
    $rand   = '';
    while(!(isset($rand[$len-1]))){
        $rand   .= mt_rand(0,9);
    }
    return substr( $rand , 0 , $len );
}

It works fine but takes time to generate.if i want to generate 1000 pin at a same time like

foreach($i=0;$i<=1000;$i++){
 get_num(16)
}

It takes more time.What is the best way to generate this kind of pin?

Upvotes: 0

Views: 3148

Answers (3)

Shrey Prajapati
Shrey Prajapati

Reputation: 559

you may try this function.this will work fine.

function getRandomNumber($len = "15")
{
    $better_token = $code=sprintf("%0".$len."d", mt_rand(1, str_pad("", $len,"9")));
    return $better_token;
}

for($i=0;$i<=1000;$i++){
    $codes[]=getRandomNumber(16);
}

in $code array you will get all 16 digit number with including 0.Output will be generated like below

Array
(
    [0] => 6432618102990092
    [1] => 5412363498471678
    [2] => 8415870470926167
    [3] => 2724858690053225
    [4] => 3719462379813195
    [5] => 0322053456788270
    [6] => 5085590323433281
    [7] => 3586620986461640
    [8] => 5041978429071606
    [9] => 0722051602788270
.....

Upvotes: 4

Parth Chavda
Parth Chavda

Reputation: 1829

$a = '';
      for ($i = 0; $i<16; $i++) 
    {
        $a .= mt_rand(0,9);
    }

you can use this function for generate random number.

it's possible to same number generate twise so you can put this number in array and check in array number is already there or not.

    function gen_num() {
        $rand   = 0;
        for ($i = 0; $i<15; $i++) 
            {
                $rand .= mt_rand(0,9);
            }
        return $rand;
    }



foreach($i=0;$i<=1000;$i++){
 echo get_num();
}

o/p

1992282192849338
2539119565182977
8186185479424499
9762937534145386
5565837949946845
6487684896937977
1437518184397774
1586381543857153
5673128433587996
4988724673517522
8323477255626612

Upvotes: 1

Sverri M. Olsen
Sverri M. Olsen

Reputation: 13283

Something like this would do just fine:

function random_digits($length) {
    $length = intval($length, 10);
    $output = '';
    for ($i = 0; $i < $length; $i++) {
        $output .= mt_rand(0, 9);
    }
    return $output;
}

Upvotes: 0

Related Questions