创建独特的随机字符串

时间:2014-08-26 16:41:53

标签: php excel random

我在php工作,我正在尝试在数据库中创建1000张票。每张票都需要它自己的唯一代码,该代码由大约6个字符长的字母和数字组成。

EXP.    
Tbl_Tickets
ID     code
1      3F2jk7
2      2HGUF1       
3      9FJDNJ
4      MFJEY9
5      23988D

我想知道有没有一种简单的方法可以用php,excel或其他任何方式来做这件事。我知道我可以使用随机数生成器,但是对Unique的检查会有一个大的BigO表示法,并且检查会变得混乱。

4 个答案:

答案 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