I want to create a function in php to suggest usernames, if the entered username is not available. For example, username entered is 'bingo' and it not available, then the system should suggest a list of usernames like this
bi_n_go
go-nbi
b-n_gio
b-ng-oi
...
Rules for creating username are :
Any help and suggestions will be highly appreciable. Thanks.
Try following code:
<?php
//mutates given user name, producing possibly incorrect username
function mutate($uname)
{
$x = str_split($uname);
//sort with custom function, that tries to produce only slightly
//random user name (as opposed to completely shuffling)
uksort($x, function($a, $b)
{
$chance = mt_rand(0, 3);
if ($chance == 0)
{
return $b - $a;
}
return $a - $b;
});
//insert randomly dashes and underscores
//(multiplication for getting more often 0 than 3)
$chance = mt_rand(0, 3) * mt_rand(0, 3) / 3.;
for ($i = 0; $i < $chance; $i ++)
{
$symbol = mt_rand() & 1 ? '-' : '_';
$pos = mt_rand(0, count($x));
array_splice($x, $pos, 0, $symbol);
}
return join('', $x);
}
//validates the output so you can check whether new user name is correct
function validate($uname)
{
//does not start nor end with alphanumeric characters
if (!preg_match('/^[a-zA-Z0-9].*[a-zA-Z0-9]$/', $uname))
{
return false;
}
//does contain more than 3 symbols
$noSymbols = preg_replace('/[^a-zA-Z0-9]+/', '', $uname);
if (strlen($uname) - strlen($noSymbols) > 3)
{
return false;
}
//shorter than 6 characters
if (strlen($uname) < 6)
{
return false;
}
return true;
}
Example usage:
$uname = 'bingo';
$desired_num = 5;
$sug = [];
while (count($sug) < $desired_num)
{
$mut = mutate($uname);
if (!validate($mut))
{
continue;
}
if (!in_array($mut, $sug) and $mut != $uname)
{
$sug []= $mut;
}
}
print_r($sug);
Example output:
Array
(
[0] => i-g-obn
[1] => bi-gno
[2] => bi_ngo
[3] => i-bnog
[4] => bign-o
)
This is my created function . I hope it will help you
echo stringGenerator("bingo");
function stringGenerator($str)
{
$middleStr = $str."-_";
$first = $str[rand(0, strlen($str)-1)];
for($i=0;$i<4;$i++)
{
$middle .= $middleStr[rand(0, strlen($middleStr))];
}
$last = $str[rand(0, strlen($str)-1)];
return $first.$middle.$last;
}
After checking through PHP and Mysql you can suggest the user by shuffling the user's input:
$str = 'abcdef';
for($i=0;$i<=3;$i++){
$shuffled = str_shuffle($str).'</br>';
echo $shuffled;
}
Output:
bfdcea
cdfbae
adefcb
beacfd