การสร้างตัวเลขสุ่ม 4 หลัก (1000-9999) ใน MySQL
ใช้ฟังก์ชัน RAND() สร้างเลขสุ่ม 0-1 คูณ 10000 แล้วใช้ FLOOR() ปัดทิ้งทศนิยม จะได้เลข 0-9999 หากต้องการ 1000-9999 ให้บวก 1000
สูตรพื้นฐาน
FLOOR(RAND() * 10000) -- 0 ถึง 9999 FLOOR(1000 + RAND() * 9000) -- 1000 ถึง 9999 (4 หลักแน่นอน)
ตัวอย่าง: อัปเดตรหัสผ่านให้เป็นเลขสุ่ม 4 หลัก
สร้างตารางผู้ใช้:
mysql> CREATE TABLE DemoTable717 (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserPassword INT
);
Query OK, 0 rows affected (0.81 sec)
mysql> INSERT INTO DemoTable717 (UserPassword) VALUES
(1454343), (674654), (989883), (909983);
Query OK, 4 rows affected
อัปเดตคอลัมน์ UserPassword ให้เป็นเลขสุ่ม 4 หลัก (0-9999):
mysql> UPDATE DemoTable717 SET UserPassword = (SELECT FLOOR(RAND() * 10000)); Query OK, 4 rows affected (0.22 sec)
ตรวจสอบผลลัพธ์ (จะได้เลขสุ่มต่างกันทุกแถว):
mysql> SELECT * FROM DemoTable717;
+--------+--------------+ | UserId | UserPassword | +--------+--------------+ | 1 | 4319 | | 2 | 3902 | | 3 | 6553 | | 4 | 1060 | +--------+--------------+ 4 rows in set (0.00 sec)
หมายเหตุสำคัญ
RAND()จะสุ่มค่าใหม่ **ทุกแถว** เมื่อใช้ใน UPDATE/SELECT- หากต้องการค่าเดียวกันทุกแถว ให้กำหนดใน Variable ก่อน:
SET @r = FLOOR(RAND()*10000); UPDATE ... SET col = @r; - สำหรับรหัสผ่านจริง ควรใช้ฟังก์ชัน Hash (SHA2, BCRYPT) ไม่ใช่เก็บเลขสุ่ม
RAND(seed)ใส่ Seed เพื่อให้ผลลัพธ์ซ้ำได้ (สำหรับ Testing)
การสร้างเลขสุ่มแบบอื่นๆ
- เลข 6 หลัก:
FLOOR(100000 + RAND() * 900000) - สุ่มจากช่วงที่กำหนด:
FLOOR(min + RAND() * (max - min + 1)) - สุ่มข้อความ: ใช้
UUID(),MD5(RAND()), หรือSUBSTRING('abcdef...', FLOOR(RAND()*len)+1, 1)