我有两个功能
这个只生成数字
//Generate a string of only numbers.
function GenerateNUM($length)
{
$alphabet = '1234567890';
$tip = array();
$alphaLength = strlen($alphabet) - 1;
for ($i = 0; $i < $length; $i ++) {
$n = rand(0, $alphaLength);
$tip[] = $alphabet[$n];
}
return implode($tip);
}
这个生成数字和字母
//Generate a string of numbers and letters.
function GenerateAll($length)
{
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$pass = array();
$alphaLength = strlen($alphabet) - 1;
for ($i = 0; $i < $length; $i ++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass);
}
我称之为
$ValidationCode = GenerateNUM(12);
或者
$ValidationCode = GenerateAll(12);
它很好但我的问题是我真的需要2块代码吗?有没有办法创建一个函数,并能够决定是否调用数字和字母?还是我在思考它?
答案 0 :(得分:1)
基于代码的组合奇异函数示例:
function GenerateCode($length,$type='ALPHA')
{
$alphabet = (($type == 'ALPHA')?'ABCDEFGHIJKLMNOPQRSTUVWXYZ':'') .'1234567890';
$code = array();
$alphaLength = strlen($alphabet) - 1;
for ($i = 0; $i < $length; $i ++) {
$n = rand(0, $alphaLength);
$code[] = $alphabet[$n];
}
return implode($code);
}
$ValidationCode = GenerateCode(12,'NUM');// just makes a numbers only code
$ValidationCode = GenerateCode(12,'ALPHA');// makes an alphanumeric code
但是,多个小实用功能没有任何问题。命名使他们保持清洁并明确他们的意图。但是,如果你在一堆实用程序函数之间有很多重复的代码,那么你可以将它们与第二个参数结合起来,并根据该参数调整内部的小块(如上所述)。
生成像函数一样的随机字符串的一个稍好的例子(包括大写和小写字母):
function GenerateCode($length,$type='ALPHA')
{
$string = '';
for ($n=1; $n <= $length; $n++) {
if ($type == 'NUM') {
$string .= mt_rand(0,9);
} else {
$randnum = mt_rand(0,61);
$string .= ( ($randnum < 10) ? chr($randnum+48) : // number chr 48 - 57
(($randnum < 36) ? chr($randnum+55) : // upperletter chr 65 - 90
chr($randnum+61) ));// lowerletter chr 97 - 122
}
}
return $string;
}
// example GenerateCode(12,'ALPHA') output: XNu1n833b2ox