PHP: Πώς να δημιουργήσετε μια τυχαία, μοναδική, αλφαριθμητική συμβολοσειρά;

Πώς είναι δυνατόν να δημιουργηθεί μια τυχαία, μοναδική συμβολοσειρά με αριθμούς και γράμματα για χρήση σε έναν σύνδεσμο επαλήθευσης; Όπως όταν δημιουργείτε έναν λογαριασμό σε έναν ιστότοπο και σας στέλνει ένα email με έναν σύνδεσμο και πρέπει να κάνετε κλικ σε αυτόν τον σύνδεσμο για να επαληθεύσετε τον λογαριασμό σας... ναι... ένα από αυτά.

Πώς μπορώ να δημιουργήσω ένα από αυτά χρησιμοποιώντας PHP;

Ενημέρωση: Μόλις θυμήθηκα το uniqid(). Είναι μια συνάρτηση PHP που παράγει ένα μοναδικό αναγνωριστικό με βάση την τρέχουσα ώρα σε μικροδευτερόλεπτα. Νομίζω ότι θα το χρησιμοποιήσω.

Λύση

Ειδοποίηση ασφαλείας: Αυτή η λύση δεν πρέπει να χρησιμοποιείται σε περιπτώσεις όπου η ποιότητα της τυχαιότητας μπορεί να επηρεάσει την ασφάλεια μιας εφαρμογής. Ειδικότερα, οι γεννήτριες τυχαίων αριθμών rand() και uniqid() δεν είναι κρυπτογραφικά ασφαλείς. Δείτε την απάντηση του Scott's για μια ασφαλή εναλλακτική λύση.

Εάν δεν χρειάζεται να είναι απολύτως μοναδικός με την πάροδο του χρόνου:

md5(uniqid(rand(), true))

Διαφορετικά (δεδομένου ότι έχετε ήδη καθορίσει ένα μοναδικό login για τον χρήστη σας):

md5(uniqid($your_user_login, true))
Σχόλια (6)

Αυτή η λειτουργία θα δημιουργήσει ένα τυχαίο κλειδί χρησιμοποιώντας αριθμούς και γράμματα:

function random_string($length) {
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));

    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }

    return $key;
}

echo random_string(50);

Παράδειγμα εξόδου:

zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8
Σχόλια (2)
  1. Δημιουργήστε έναν τυχαίο αριθμό χρησιμοποιώντας τον αγαπημένο σας τυχαίο αριθμό γεννήτρια
  2. Πολλαπλασιάστε και διαιρέστε τον για να πάρετε έναν αριθμό που ταιριάζει με τον αριθμό των χαρακτήρων στο αλφάβητο του κωδικού σας
  3. Πάρτε το στοιχείο στο συγκεκριμένο δείκτη στο αλφάβητο του κωδικού σας.
  4. Επαναλάβετε από το 1) μέχρι να έχετε το μήκος που θέλετε που θέλετε

π.χ. (σε ψευδοκώδικα)

int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough
Σχόλια (1)