|
|
|
มี function ใด ที่ ทำให้ การ random ใน php ไม่มีการ ซ้ำค่า ที่ random |
|
|
|
|
|
|
|
PHP rand()
|
|
|
|
|
Date :
2009-08-28 00:39:43 |
By :
panyapol |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบแรก ยัดเข้า array แล้วตรวจดูใน array
<?php
srand(time());
$num = 10;
$a = array();
while (count($a) < $num) {
$n = rand() % $num;
if (!in_array($n, $a)) array_push($a,$n);
}
for ($i=0;$i<$num;$i++) echo $a[$i]."<br>";
?>
หรือจะใช้ shuffle เพื่อสลับอีกทีก็ได้
หรือแบบ OOP จาก ที่มา http://www.thaiseoboard.com/index.php?topic=47720.0
<?php
class UniquelyRandom {
// private static $alreadyGenerated = array();
var $alreadyGenerated = array(); // สำหรับ php 4 จะใช้ static ไม่ได้
function urand($min = NULL, $max = NULL)
{
$range = ($min) && ($max) ? ($max - $min) + 1 : NULL;
do{
$randValue = ($range) ? rand($min, $max) : rand();
$key = md5($randValue);
if(count($rangeList) == $range) return NULL;
if($range) $rangeList[$key] = NULL;
//}while(self::$alreadyGenerated[$key]);
} while($this->alreadyGenerated[$key]) ; // สำหรับ php4
unset($rangeList);
//self::$alreadyGenerated[$key] = $randValue;
$this->alreadyGenerated[$key] = $randValue ;
return $randValue;
}
}
?>
เวลาเรียกใช้อีกไฟล์ก็
<?php
include_once($root_path.'includes/uniqueRandom.class.php') ;
$Rand = new UniquelyRandom ;
$count = 5 ;
$getran = $Rand->urand(1,$count) ;
echo $getran ; // ดูผล
?>
ที่มา http://www.thaiseoboard.com/index.php?topic=47720.0
|
|
|
|
|
Date :
2009-08-28 07:21:25 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาไปทำอะไรล่ะครับ
|
|
|
|
|
Date :
2009-08-28 09:32:37 |
By :
pjgunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
random รหัส 4 ตัว ผสม ตัวเลข,อักษร ส่งให้ลูกค้า ทาง sms เพื่อให้ login เข้าระบบเรา...
|
|
|
|
|
Date :
2009-08-28 09:36:51 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งั้นให้แรนด้อม เสร็จแล้วตรวจในฐานข้อมูลว่ามีหรือยัง ถ้ามีแล้วก็ ให้แลนด้อมใหม่ จนกว่าจะเจอตัวที่ยังไม่มี
ได้เปล่า ครับ
|
|
|
|
|
Date :
2009-08-28 09:41:00 |
By :
ariya99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตามเรพ 5 ครับ
เพิ่มเติม
Code (PHP)
<?php
$pwd = md5(rand());
echo substr($pwd, -4);
?>
|
|
|
|
|
Date :
2009-08-28 09:46:10 |
By :
pjgunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าเป็นผม
จะเพิ่มฟิวด์ขึ้นมา 1 ฟิวด์ ตั้งชื่อว่า active สถานะ(มีการ loginเข้าระบบหรือยัง)
กำหนดเป็น int ค่าที่รับเข้าไปคือ 0 หรือ 1
ตัวอย่าง
code เบอร์โทร สถานะ(มีการ loginเข้าระบบหรือยัง)
A1GH 08123456 1
Sd45 08154447 0
* ถ้ามีการ rand Code ซ้ำ
A1GH 012485798 0
ถ้าส่ง sms ส่ง code เข้ามา ก็สร้างเงื่อนไขการตรวจเช็ค
code และเบอร์ถูกไหม โดย where `active` = 0 เข้าไปด้วย
สังเกตุว่าจะใช้ ฟิวด์ที่เพิ่มมาใหม่ในการตรวจเช็ค โดยไม่สนใจว่า code จะซ้ำไหม
ลองเอาดัดแปลงดูนะครับ ผมอธิบายไม่ค่อยเก่งเท่าไหร่
|
|
|
|
|
Date :
2009-08-28 10:03:59 |
By :
dseason |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่มครับ...คุณเอี่ยว อธิบาย code ที่ให้ผมหน่อยนะครับ ขอบคุณครับ เรื่อง เอา md5 เข้ามาช่วยนะครับ...
|
|
|
|
|
Date :
2009-08-29 07:56:17 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
md5 คือการเข้ารหัส ผมก็ไม่รู้เชิงทฤษฎีหรอกนะครับ รู้สึกว่า(ไม่แน่ใจจะได้ 25 ตัว)
แต่มันเข้าระหัสตัวเลขที่เราสุ่มขึ้นมาดังนั้น เราก็จะสามารถเอาไปใช้ตามที่คุณต้องการได้เลยเพียงแต่ต้องเช็คบนฐานข้อมูลก่อน เพื่อไม่ให้ซ้ำตามที่คุณต้องการ
|
|
|
|
|
Date :
2009-08-29 08:00:08 |
By :
pjgunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ..
|
|
|
|
|
Date :
2009-09-01 12:37:54 |
By :
las |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จริงๆแล้ว ถ้า แรนดอม ออกมาแล้วซ้ำกัน md5() ก็ช่วยอะไรไม่ได้หรอกครับ ย้ำว่า ถ้าซ้ำกันนะครับ
|
|
|
|
|
Date :
2009-09-01 12:59:49 |
By :
lozomac |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาไปใช้กับ รหัสผ่าน ที่ใช้แล้วทิ้งไป นะครับ คงจะได้ หรือคุณA-mac มีคำแนะนำอื่นไหมครับ...
|
|
|
|
|
Date :
2009-09-01 17:07:41 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้า random ตัวเริ่มต้นตัด ของ md5() ด้วยจะดีไหมครับแต่ ไม่เกิน 22 นะครับ เพราะ ถ้า md5 คืนค่ามา 25 ตัวสุงสุด ผมต้องการแค่ 4 ตัว...
|
|
|
|
|
Date :
2009-09-01 17:11:09 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สี่ตัวใช่มั้ยครับ แบบนี้ก็น่าจะได้นะครับ
Code (PHP)
<?php
echo chr(rand(48,57))."";
echo chr(rand(64,90))."";
echo chr(rand(97,113))."";
echo chr(rand(35,38))."";
?>
|
|
|
|
|
Date :
2009-09-01 17:35:11 |
By :
lozomac |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืม อ่านแล้วได้ idea ดีครับ ชอบๆ อยากตอบอยู่เหมือนกันไม่รู้จะตอบอะไร
นิดนึงครับ รู้สึก md5(); แล้วจะได้ 32 ตัวนะครับ
|
|
|
|
|
Date :
2009-09-01 17:44:47 |
By :
peterxp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ A-mac ถ้าทำแบบนี้ มันจะ rand แล้วมีโอกาสซ้ำกัน น้อย ด้วยไหมครับ
|
|
|
|
|
Date :
2009-09-01 23:42:36 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็ 1 ใน (10 * 26 *26 * 4) อ่ะครับ
|
|
|
|
|
Date :
2009-09-01 23:53:20 |
By :
lozomac |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืมม ก็ ขอบคุณทุกท่านมาก ที่ ให้คำตอบ
|
|
|
|
|
Date :
2009-09-02 09:16:49 |
By :
nilas |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|