For an ecommerce site I want to generate a random coupon code that looks better than a randomly generated value. It should be a readable coupon code, all in uppercase with no special characters, only letters (A-Z) and numbers (0-9).
Since people might be reading this out / printing it elsewhere, we need to make this a simple-to-communicate value as well, perhaps 8-10 characters long.
Something like perhaps,
AHS3DJ6BW B83JS1HSK
(I typed that, so it’s not really that random)
Advertisement
Answer
$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $res = ""; for ($i = 0; $i < 10; $i++) { $res .= $chars[mt_rand(0, strlen($chars)-1)]; }
You can optimize this by preallocating the $res
string and caching the result of strlen($chars)-1
. This is left as an exercise to the reader, since probably you won’t be generating thousands of coupons per second.