- substr: documentation ( source)
- var_dump: documentation ( source)
- bin2hex: documentation ( source)
- abs: documentation ( source)
- hash_hmac: documentation ( source)
- hexdec: documentation ( source)
<?php
class TokenGenerator
{
const ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
public function generateToken($length = 16)
{
$alphabetSize = strlen(self::ALPHABET);
$token = '';
while (strlen($token) < $length) {
$randomBytes = hash_hmac('sha256', openssl_random_pseudo_bytes(20), mcrypt_create_iv(20, \MCRYPT_DEV_URANDOM));
$offset = abs(hexdec(bin2hex(substr($randomBytes, 0, 4)))) % $alphabetSize;
$token .= substr(self::ALPHABET, $offset, 1);
}
return $token;
}
}
$gen = new TokenGenerator();
var_dump($gen->generateToken(10));
var_dump($gen->generateToken(10));
var_dump($gen->generateToken(10));
var_dump($gen->generateToken(20));
var_dump($gen->generateToken(20));
var_dump($gen->generateToken(20));