課程
/后端開發(fā)
/PHP
/PHP實(shí)現(xiàn)驗(yàn)證碼制作
substr($data,rand(0,strlen($data)),1);這個(gè)函數(shù)的解釋? ?? 這樣取值是隨機(jī)多少個(gè)?
還有的地方看到最后是-1?? 這又是什么意思?
2017-03-22
源自:PHP實(shí)現(xiàn)驗(yàn)證碼制作 1-6
正在回答
這是PHP中的代碼,我們從括號(hào)里往外看:
strlen()用于返回字符串$data的長(zhǎng)度,假設(shè)$data字符串長(zhǎng)度為10;
rand(0,strlen($data))生成0~10中的一個(gè)隨機(jī)整數(shù)并返回,假設(shè)返回6;
substr($data,rand(0,strlen($data)),1);先簡(jiǎn)化為:
substr($data,6,1);就是返回$data字符串中從下標(biāo)為6的字符開始截取1個(gè)字符并返回;
假設(shè)$data="一二三四五六七八九十";
就是先用strlen()得到這個(gè)字符串的長(zhǎng)度10,然后用rand()從0~10中取一個(gè)隨機(jī)整數(shù)6,然后用這個(gè)整數(shù)6做下標(biāo)用substr()取出字符串中對(duì)應(yīng)的字符"七"。
這串代碼應(yīng)該有點(diǎn)問題,因?yàn)樽址拈L(zhǎng)度會(huì)比字符串的最大下標(biāo)大1,所以應(yīng)該是strlen($data)-1。
修正后的代碼可以在PHP中用于在若干個(gè)自定義字符中隨機(jī)選取若干個(gè)生成驗(yàn)證碼
$data = 'abcdefghijkmnpqrstuvwxyQWERTYUIOPLKJHGFDSAZXCVBNM3456789';
? $code = ""; //定義一個(gè)空字符串
? for ($i = 0; $i < 4; $i++) { //循環(huán)四次
? ? $code .= substr($data, rand(0, strlen($data)-1), 1); //將隨機(jī)取出的字符拼入字符串$code中
? }?
上述代碼就是在所有大小寫字母和數(shù)字中隨機(jī)選取4個(gè)字符(除了小寫l,z,o,數(shù)字1,2)當(dāng)成驗(yàn)證碼保存在$code中。
-1反方向開始長(zhǎng)度1
舉報(bào)
各種形態(tài)驗(yàn)證碼核心原理與實(shí)現(xiàn)技巧,講解實(shí)現(xiàn)過(guò)程中的技術(shù)難點(diǎn)
1 回答代碼解釋一下可以嗎
2 回答$index = rand(0,count($strdb));這個(gè)函數(shù)
1 回答為什么要rand()這個(gè)函數(shù)呢
3 回答用iconv函數(shù)講驗(yàn)證碼轉(zhuǎn)彎utf-8,結(jié)果$_SESSION存放的值變亂碼了,不解
2 回答一直說(shuō)輸入錯(cuò)誤
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2017-09-23
這是PHP中的代碼,我們從括號(hào)里往外看:
strlen()用于返回字符串$data的長(zhǎng)度,假設(shè)$data字符串長(zhǎng)度為10;
rand(0,strlen($data))生成0~10中的一個(gè)隨機(jī)整數(shù)并返回,假設(shè)返回6;
substr($data,rand(0,strlen($data)),1);先簡(jiǎn)化為:
substr($data,6,1);就是返回$data字符串中從下標(biāo)為6的字符開始截取1個(gè)字符并返回;
假設(shè)$data="一二三四五六七八九十";
就是先用strlen()得到這個(gè)字符串的長(zhǎng)度10,然后用rand()從0~10中取一個(gè)隨機(jī)整數(shù)6,然后用這個(gè)整數(shù)6做下標(biāo)用substr()取出字符串中對(duì)應(yīng)的字符"七"。
這串代碼應(yīng)該有點(diǎn)問題,因?yàn)樽址拈L(zhǎng)度會(huì)比字符串的最大下標(biāo)大1,所以應(yīng)該是strlen($data)-1。
修正后的代碼可以在PHP中用于在若干個(gè)自定義字符中隨機(jī)選取若干個(gè)生成驗(yàn)證碼
$data = 'abcdefghijkmnpqrstuvwxyQWERTYUIOPLKJHGFDSAZXCVBNM3456789';
? $code = ""; //定義一個(gè)空字符串
? for ($i = 0; $i < 4; $i++) { //循環(huán)四次
? ? $code .= substr($data, rand(0, strlen($data)-1), 1); //將隨機(jī)取出的字符拼入字符串$code中
? }?
上述代碼就是在所有大小寫字母和數(shù)字中隨機(jī)選取4個(gè)字符(除了小寫l,z,o,數(shù)字1,2)當(dāng)成驗(yàn)證碼保存在$code中。
2017-03-22
-1反方向開始長(zhǎng)度1