Php 如何生成具有交替字母和数字的随机6字符字符串?
我有一个PHP代码,可以生成一个6个字符的字母数字字符串,但它不能确保生成3个字母和3个数字 它生成一个字符串,如“ps7ycn” 字母表之间没有3个数字。 数字应该在字母之间Php 如何生成具有交替字母和数字的随机6字符字符串?,php,string,random,passwords,alphanumeric,Php,String,Random,Passwords,Alphanumeric,我有一个PHP代码,可以生成一个6个字符的字母数字字符串,但它不能确保生成3个字母和3个数字 它生成一个字符串,如“ps7ycn” 字母表之间没有3个数字。 数字应该在字母之间 示例:a3g5h9这里有一种方法可以解决这个问题: $alpha = 'abcdefghijklmnopqrstuvwxyz'; $number = '0123456789'; $random = ''; for ( $i = 0; $i < 6; ++$i ) { if ( $i % 2 ) {
示例:a3g5h9这里有一种方法可以解决这个问题:
$alpha = 'abcdefghijklmnopqrstuvwxyz';
$number = '0123456789';
$random = '';
for ( $i = 0; $i < 6; ++$i ) {
if ( $i % 2 ) {
$random .= substr( $number, rand( 0, strlen( $number ) - 1 ), 1 );
} else {
$random .= substr( $alpha, rand( 0, strlen( $alpha ) - 1 ), 1 );
}
}
$alpha='abcdefghijklmnopqrstuvwxyz';
$number='0123456789';
$random='';
对于($i=0;$i<6;++$i){
如果($i%2){
$random.=substr($number,rand(0,strlen($number)-1),1);
}否则{
$random.=substr($alpha,rand(0,strlen($alpha)-1),1);
}
}
$random
现在将包含一个六个字符的随机值,第一个、第三个和第五个字符来自$alpha
,第二个、第四个和第六个字符来自$number
以下是一种解决此问题的方法:
$alpha = 'abcdefghijklmnopqrstuvwxyz';
$number = '0123456789';
$random = '';
for ( $i = 0; $i < 6; ++$i ) {
if ( $i % 2 ) {
$random .= substr( $number, rand( 0, strlen( $number ) - 1 ), 1 );
} else {
$random .= substr( $alpha, rand( 0, strlen( $alpha ) - 1 ), 1 );
}
}
$alpha='abcdefghijklmnopqrstuvwxyz';
$number='0123456789';
$random='';
对于($i=0;$i<6;++$i){
如果($i%2){
$random.=substr($number,rand(0,strlen($number)-1),1);
}否则{
$random.=substr($alpha,rand(0,strlen($alpha)-1),1);
}
}
$random
现在将包含一个六个字符的随机值,第一个、第三个和第五个字符来自$alpha
,第二个、第四个和第六个字符来自$number
这将确保您只获得交替的字母和数字:
代码:()
p、 s.如果要随机化第一个字符是字母还是数字,请在
for
循环后使用这行代码
if(rand(0,1)){$string=strrev($string);}
rand()
将生成0
或1
,条件将0
视为false
,1
视为true
。这提供了一个关于是否反转字符串的“抛硬币”场景
如果要保证输出中的字母和数字唯一
$letters=range('a','z'); // ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
shuffle($letters);
$numbers=range(0,9); // [0,1,2,3,4,5,6,7,8,9]
shuffle($numbers);
$string='';
for($x=0; $x<3; ++$x){
$string.=$letters[$x].$numbers[$x];
}
echo $string;
$letters=范围('a','z');//[a'、'b'、'c'、'd'、'e'、'f'、'g'、'h'、'i'、'j'、'k'、'l'、'm'、'n'、'o'、'p'、'q'、'r'、's'、't'、'u'、'v'、'w'、'x'、'y'、'z']
洗牌(字母);
$numbers=范围(0,9);//[0,1,2,3,4,5,6,7,8,9]
洗牌(数字);
$string='';
对于($x=0;$x这将确保您只获得交替的字母和数字:
代码:()
p、 s.如果要随机化第一个字符是字母还是数字,请在for
循环后使用这行代码
if(rand(0,1)){$string=strrev($string);}
rand()
将生成一个0
或1
,条件将0
视为false
,1
视为true
。这提供了一个关于是否反转字符串的“投币”场景
如果要保证输出中的字母和数字唯一
$letters=range('a','z'); // ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
shuffle($letters);
$numbers=range(0,9); // [0,1,2,3,4,5,6,7,8,9]
shuffle($numbers);
$string='';
for($x=0; $x<3; ++$x){
$string.=$letters[$x].$numbers[$x];
}
echo $string;
$letters=range('a','z');/['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
洗牌(字母);
$numbers=范围(0,9);//[0,1,2,3,4,5,6,7,8,9]
洗牌(数字);
$string='';
对于($x=0;$x您可以使用此函数
<?php
public static function random_string($charsNo = 3, $NumbersNo = 3)
{
$character_set_array = array();
$character_set_array[] = array('count' => $charsNo, 'characters' => 'abcdefghijklmnopqrstuvwxyzasdsawwfdgrzvyuyiuhjhjoppoi');
$character_set_array[] = array('count' => $NumbersNo, 'characters' => '0123456789');
$temp_array = array();
foreach ($character_set_array as $character_set) {
for ($i = 0; $i < $character_set['count']; $i++) {
$temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
}
}
shuffle($temp_array);
return implode('', $temp_array);
}
?>
您可以使用此功能
<?php
public static function random_string($charsNo = 3, $NumbersNo = 3)
{
$character_set_array = array();
$character_set_array[] = array('count' => $charsNo, 'characters' => 'abcdefghijklmnopqrstuvwxyzasdsawwfdgrzvyuyiuhjhjoppoi');
$character_set_array[] = array('count' => $NumbersNo, 'characters' => '0123456789');
$temp_array = array();
foreach ($character_set_array as $character_set) {
for ($i = 0; $i < $character_set['count']; $i++) {
$temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
}
}
shuffle($temp_array);
return implode('', $temp_array);
}
?>
尝试以下代码:
$str = '';
for ( $i = 1; $i <= 6; ++$i ) {
if ( $i % 2 ) {
$str .= chr(rand(97,122));
}else{
$str .= rand(0,9);
}
}
$str='';
对于($i=1;$i请尝试以下代码:
$str = '';
for ( $i = 1; $i <= 6; ++$i ) {
if ( $i % 2 ) {
$str .= chr(rand(97,122));
}else{
$str .= rand(0,9);
}
}
$str='';
对于($i=1;$i您的代码在哪里?数字或字母是否可以复制?是否可以:3r3r
?字符类型是否需要替换或是否有效:123abc
?您是否在发布问题之前搜索了已有的答案?欢迎使用StackOverflow。请阅读并遵循发布指南:什么类型我可以问的问题以及如何问:记住也要包括最小的、完整的、可验证的示例:。然后,单击edit
编辑您的问题,以便我们可以提供帮助。您的代码在哪里?数字或字母可以重复吗?这样可以吗:3r3r
?字符类型需要交替还是有效:>123abc
?在发布问题之前,您是否在SO上搜索了预先存在的答案?欢迎来到StackOverflow。请阅读并遵循发布指南:我可以问什么类型的问题,以及如何提问:记住也要包含最少的、完整的、可验证的示例:。然后,单击编辑编辑您的问题,以便我们可以帮忙,因为它永远不会改变,调用strlen()
每次迭代都不是最佳做法。最好在多维数组中创建另一个存储长度的元素。空数组声明是不必要的。此外,当使用空字符串将数组元素粘合在一起时,可以忽略第一个参数。请参阅我的答案。我犯了与在我之前的帖子中,你假设六个数字和字母需要被洗牌(以获得最大的随机性)。然而,这不是OP所要求的。问题是三个字母应该用数字分隔。你为什么卡住了“gobbledygook在您的characters元素中,26个字母的含义是什么?您给某些字母的概率增加了不必要的权重。我对这个答案投了反对票,因为它没有提供OP要求的输出。因为它从不更改,请调用strlen()
每次迭代都不是最佳做法。最好在多维数组中创建另一个存储长度的元素。空数组声明是不必要的。此外,当使用空字符串将数组元素粘合在一起时,可以忽略第一个参数。请参阅我的答案。我犯了与你在我之前的帖子中假设六个数字和字母需要被洗牌(以获得最大的随机性)。然而,这不是OP所要求的。问题是