class String { /** +---------------------------------------------------------- * 生成UUID 單機(jī)使用 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static public function uuid() { $charid = md5(uniqid(mt_rand(), true)); $hyphen = chr(45);// "-" $uuid = chr(123)// "{" .substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12) .chr(125);// "}" return $uuid; } /** +---------------------------------------------------------- * 生成Guid主鍵 +---------------------------------------------------------- * @return Boolean +---------------------------------------------------------- */ static public function keyGen() { return str_replace('-','',substr(String::uuid(),1,-1)); } /** +---------------------------------------------------------- * 檢查字符串是否是UTF8編碼 +---------------------------------------------------------- * @param string $string 字符串 +---------------------------------------------------------- * @return Boolean +---------------------------------------------------------- */ static public function isUtf8($str) { $c=0; $b=0; $bits=0; $len=strlen($str); for($i=0; $i<$len; $i++){ $c=ord($str[$i]); if($c > 128){ if(($c >= 254)) return false; elseif($c >= 252) $bits=6; elseif($c >= 248) $bits=5; elseif($c >= 240) $bits=4; elseif($c >= 224) $bits=3; elseif($c >= 192) $bits=2; else return false; if(($i+$bits) > $len) return false; while($bits > 1){ $i++; $b=ord($str[$i]); if($b < 128 || $b > 191) return false; $bits--; } } } return true; } /** +---------------------------------------------------------- * 字符串截取,支持中文和其他編碼 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $str 需要轉(zhuǎn)換的字符串 * @param string $start 開(kāi)始位置 * @param string $length 截取長(zhǎng)度 * @param string $charset 編碼格式 * @param string $suffix 截?cái)囡@示字符 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static public function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_exists("mb_substr")) $slice = mb_substr($str, $start, $length, $charset); elseif(function_exists('iconv_substr')) { $slice = iconv_substr($str,$start,$length,$charset); }else{ $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); } return $suffix ? $slice.'...' : $slice; } /** +---------------------------------------------------------- * 產(chǎn)生隨機(jī)字串,可用來(lái)自動(dòng)生成密碼 * 默認(rèn)長(zhǎng)度6位 字母和數(shù)字混合 支持中文 +---------------------------------------------------------- * @param string $len 長(zhǎng)度 * @param string $type 字串類(lèi)型 * 0 字母 1 數(shù)字 其它 混合 * @param string $addChars 額外字符 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static public function randString($len=6,$type='',$addChars='') { $str =''; switch($type) { case 0: $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$addChars; break; case 1: $chars= str_repeat('0123456789',3); break; case 2: $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$addChars; break; case 3: $chars='abcdefghijklmnopqrstuvwxyz'.$addChars; break; case 4: $chars = "們阿斯頓發(fā)生地方阿斯蒂芬阿斯蒂芬ASF地V字形陳V手勢(shì)地方過(guò)水電費(fèi)v鬼地方乖寶寶雙方都 山東飯館山東飯館撒地方v睡的地方改水電費(fèi)撒地方感受到法國(guó)地神風(fēng)怪盜搞活動(dòng)大發(fā)光火地方館地方高大發(fā)光火的反光板的廣播臺(tái)地方館別DVB大小分割撒地方 啥地方告訴對(duì)方釋放掉豆沙方糕撒地方干點(diǎn)啥風(fēng)格白癜風(fēng)鍋煽豆腐山東飯館時(shí)代復(fù)分高速鋼微軟消費(fèi)稅大發(fā)光火好的銹掃畢璃寶芯爺鑒秘凈蔣鈣肩騰枯拋軌堂拌爸循誘祝勵(lì)肯酒繩窮塘燥泡袋朗喂鋁軟渠顆慣貿(mào)糞綜墻趨彼屆墨礙啟逆卸航衣孫齡嶺騙休借".$addChars; break; default : // 默認(rèn)去掉了容易混淆的字符oOLl和數(shù)字01,要添加請(qǐng)使用addChars參數(shù) $chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$addChars; break; } if($len>10 ) {//位數(shù)過(guò)長(zhǎng)重復(fù)字符串一定次數(shù) $chars= $type==1? str_repeat($chars,$len) : str_repeat($chars,5); } if($type!=4) { $chars = str_shuffle($chars); $str = substr($chars,0,$len); }else{ // 中文隨機(jī)字 for($i=0;$i<$len;$i++){ $str.= self::msubstr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1,'utf-8',false); } } return $str; } /** +---------------------------------------------------------- * 生成一定數(shù)量的隨機(jī)數(shù),并且不重復(fù) +---------------------------------------------------------- * @param integer $number 數(shù)量 * @param string $len 長(zhǎng)度 * @param string $type 字串類(lèi)型 * 0 字母 1 數(shù)字 其它 混合 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static public function buildCountRand ($number,$length=4,$mode=1) { if($mode==1 && $length<strlen($number) ) { //不足以生成一定數(shù)量的不重復(fù)數(shù)字 return false; } $rand = array(); for($i=0; $i<$number; $i++) { $rand[] = self::randString($length,$mode); } $unqiue = array_unique($rand); if(count($unqiue)==count($rand)) { return $rand; } $count = count($rand)-count($unqiue); for($i=0; $i<$count*3; $i++) { $rand[] = self::randString($length,$mode); } $rand = array_slice(array_unique ($rand),0,$number); return $rand; } /** +---------------------------------------------------------- * 帶格式生成隨機(jī)字符 支持批量生成 * 但可能存在重復(fù) +---------------------------------------------------------- * @param string $format 字符格式 * # 表示數(shù)字 * 表示字母和數(shù)字 $ 表示字母 * @param integer $number 生成數(shù)量 +---------------------------------------------------------- * @return string | array +---------------------------------------------------------- */ static public function buildFormatRand($format,$number=1) { $str = array(); $length = strlen($format); for($j=0; $j<$number; $j++) { $strtemp = ''; for($i=0; $i<$length; $i++) { $char = substr($format,$i,1); switch($char){ case "*"://字母和數(shù)字混合 $strtemp .= String::randString(1); break; case "#"://數(shù)字 $strtemp .= String::randString(1,1); break; case "$"://大寫(xiě)字母 $strtemp .= String::randString(1,2); break; default://其他格式均不轉(zhuǎn)換 $strtemp .= $char; break; } } $str[] = $strtemp; } return $number==1? $strtemp : $str ; } /** +---------------------------------------------------------- * 獲取一定范圍內(nèi)的隨機(jī)數(shù)字 位數(shù)不足補(bǔ)零 +---------------------------------------------------------- * @param integer $min 最小值 * @param integer $max 最大值 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static public function randNumber ($min, $max) { return sprintf("%0".strlen($max)."d", mt_rand($min,$max)); } // 自動(dòng)轉(zhuǎn)換字符集 支持?jǐn)?shù)組轉(zhuǎn)換 static public function autoCharset($string, $from='gbk', $to='utf-8') { $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from; $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to; if (strtoupper($from) === strtoupper($to) || empty($string) || (is_scalar($string) && !is_string($string))) { //如果編碼相同或者非字符串標(biāo)量則不轉(zhuǎn)換 return $string; } if (is_string($string)) { if (function_exists('mb_convert_encoding')) { return mb_convert_encoding($string, $to, $from); } elseif (function_exists('iconv')) { return iconv($from, $to, $string); } else { return $string; } } elseif (is_array($string)) { foreach ($string as $key => $val) { $_key = self::autoCharset($key, $from, $to); $string[$_key] = self::autoCharset($val, $from, $to); if ($key != $_key) unset($string[$key]); } return $string; } else { return $string; } }}
?