[英]How can I remove digits from a number and replace it with letters in PHP?
考虑$number="1234567890";
如何获得“gRkBDa7890”的结果前 6 位数字应替换为随机大小写字母,并且只有$number
的最后 4 位数字应相同。 $number
的值每次都会不同,但总是 10 位数字。 目的是从他们的电话号码为每个用户生成推荐/邀请代码。
你可以试试这个
$number = "1122334455667788";
$masked = str_pad(substr($number, -4), strlen($number), ' ', STR_PAD_LEFT);
function generateRandomString($length = 10) {
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}
$genco = generateRandomString();
$reffcode = $genco.$masked;
$reffcode = str_replace(' ', '', $reffcode);
echo trim($reffcode);
并且为了不重复,您应该在数据库中添加所有给定的推荐代码
然后,当您将新的 reff 代码提供给 other 时,您需要检查它是否已注册,如果为 true,则重新生成字符串,如果为 false,则提供生成的字符串
诀窍是首先将电话号码的最后 4 个数字分开,然后创建一个新的 6 个字符长的小写和大写字母随机字符串。 接下来,将两者结合起来。
正如 Glossy Power 所说,您应该根据数据库中的现有代码检查新创建的推荐代码。 这是以 while 循环的形式完成的。 下面的代码将执行此操作。
function referral_code($phone_number){
// Get last four digits from phone number
$last_four_digits = substr($phone_number, -4);
// Set continue to true for looping
$continue = true;
// Loop
while ($continue) {
// Accepted characters for first part of referral link
$input = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Initiate variable
$random_letters = '';
// Create 6 character random string
for ($i = 0; $i < 6; $i++) {
$random_letters .= $input[rand(0, strlen($input) - 1)];
}
// Combine new random string with last four digits
$referral_code = $random_letters.$last_four_digits;
// Check if the newly created referral code is present in database
$sql = "SELECT referral_code FROM table WHERE referral_code = '$referral_code' LIMIT 1";
$result = mysqli_query($connection, $sql);
// If number of returned rows is zero
if(mysqli_num_rows($result) == 0) {
// Set continue to false to stop loop
$continue = false;
// Return referral code
return $referral_code;
}
}
}
您可以像这样启动 function:
echo referral_code('0612345678');
这将返回一个 10 个字符的字符串,其中前 6 个字符是随机的小写和大写字母,最后 4 个字符是 5678。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.