我在php工作,我正在尝试在数据库中创建1000张票。每张票都需要它自己的唯一代码,该代码由大约6个字符长的字母和数字组成。
EXP.
Tbl_Tickets
ID code
1 3F2jk7
2 2HGUF1
3 9FJDNJ
4 MFJEY9
5 23988D
我想知道有没有一种简单的方法可以用php,excel或其他任何方式来做这件事。我知道我可以使用随机数生成器,但是对Unique的检查会有一个大的BigO表示法,并且检查会变得混乱。
答案 0 :(得分:0)
唯一与随机不兼容,但以下可能适合:
=CHOOSE(RANDBETWEEN(1,2),RANDBETWEEN(0,9),CHAR(RANDBETWEEN(65,90)))
在G:
中复制以填充六列(例如A到F) =A1&B1&C1&D1&E1&F1
并向下复制到第1100行。然后选择G,复制粘贴特殊值,并删除ColumnG上的重复项,并选择前1000个条目。
答案 1 :(得分:0)
您可以在php中轻松创建字符串数组并将其写入数据库:
function generateRandomString($length = 6, $letters = '1234567890QWERTYUIOPASDFGHJKLZXCVBNM'){
$s = '';
$lettersLength = strlen($letters)-1;
for($i = 0 ; $i < $length ; $i++){
$s .= $letters[rand(0,$lettersLength)];
}
return $s;
}
// Create an array with random strings
for ($i=0; $i<1000; $i++){
$ticket_numbers = array();
$ticket_number = generateRandomString();
while (in_array($ticket_number,$ticket_numbers))
$ticket_number = generateRandomString();
$ticket_numbers[] = $ticket_number;
}
// Write the array to a database
$con = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error");
foreach ($ticket_numbers as $number){
mysqli_query($con,"Your insert query using the value $number");
}
mysqli_close($con);
这可以帮助你朝着正确的方向前进,尽管可能有更好的方法来做到这一点。
函数generateRandomString()取自How to generate random numbers/letters with PHP/Javascript
答案 2 :(得分:0)
另一种选择。加密保证是唯一的,因此加密数字0,1,2 ......将为您提供有保证的独特随机看似输出。六个字符使用Base32为30位,或使用Base64为36位。你需要一个30(或36位)的密码。除非你有一个包含Hasty Pudding cypher的库(不太可能),否则只需用适当的块大小实现一个简单的四轮Feistel cypher。它不会完全安全,但它足以击败偶然攻击。
答案 3 :(得分:0)
这会在 B 列中生成随机字符串无重复 B1 B1001
Sub Lottery()
Dim i As Long, j As Long, c As Collection
Set c = New Collection
v = Split("0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z", ",")
For i = 1 To 5000
can = ""
For j = 1 To 6
can = can & v(Application.RandBetween(0, 35))
Next j
On Error Resume Next
c.Add can, CStr(can)
On Error GoTo 0
If c.Count = 1000 Then Exit For
Next i
For i = 1 To 1000
Cells(i + 1, 2).Value = c(i)
Next i
End Sub