views:

192

answers:

5

I need a random 4 digit number

right now im using rand(1000,9999) that always gives me a 4 digit number but i eliminates 0000-0999 as possible results.

how do you pad a random number?

(also this is eventually going to be added to a string do i need to cast the int as a string?)

thanks

+3  A: 

Quick and dirty... how about doing:

rand(10000,19999)

and take the last four digits:

substr(rand(10000, 19999), 1, 4)
Tenner
Smart! I must say. Thinking out of the box.
o.k.w
Although this will work, coming across this in code is going to make me pause and wonder what is going on.
Gavin Miller
@LFSR: You're absolutely right, which is why it's quick and "dirty". :-)
Tenner
+6  A: 
sprintf("%04d", rand(0,9999))

should do what you want

Joey
damn it. one second too late -.-
Etan
+1 for both of you but check goes to Rossel
Crash893
actually you have like a million rep points im going to give it to etan
Crash893
Aww. I've hit the rep cap for today a few hours ago anyway. So whether it's 215 or 230 doesn't make much of a difference :-)
Joey
+11  A: 

In scripting languages like PHP, you don't have to cast in 99% of the cases.

Padding could be done using

sprintf("%04u", rand(0, 9999));

Explanations

the first argument of sprintf specifies the format

  • % stays for the second, third, forth etc. argument. the first % gets replaced by the second argument, the second % by the third etc.
  • 0 stays for the behaviour of filling with 0 to the left.
  • 4 stays for "At least 4 characters should be printed"
  • u stays for unsigned integer.
Etan
+1 i give you the check anyway
Crash893
+1. Nice dissection of the format string. I always have to look them up :-)
Joey
A: 

You can use str_pad() or sprintf() to format your string:

$rand = rand(0, 9999);
$str1 = str_pad($rand, 4, '0', STR_PAD_LEFT);
$str2 = sprintf('%04u', $rand);
Greg
+3  A: 
str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT);

Use mt_rand() instead of rand(), it's better.

Alix Axel