I want to generate 1M random (appearing) unique alphanumeric keys and store them in a database. Each key will be 8 characters long and only the subset “abcdefghijk n pqrstuvxyz and 0-9” will be used.
The letters l,m,o and w are ditched. “m and w” are left out because of limited printing space, as each key will be printed on a product in a very small space. Dropping m and w enabled to increase the letter size with 2pt, improving readability. l and o were dropped because they are easily mixed up with 1, i and 0 at the current printing size. We did some testing characters 1,i, and 0 were always read correctly, l and o had to many mistakes. Capitals were left out for the same reason as ‘m and w”.
So why not a sequence? A few reasons: The keys can be registered afterwards and we do not want anyone guessing the next key in the sequence and register somebody else’s key. Appearance: we don’t need customers and competition to know we only shipped a few thousand keys.
Is there a practical way to generate the keys, ensure the uniqueness of each key and store them in a database? Thanks!
Edit: @CodeInChaos pointed out a problem:
System.Randomisn’t very secure, and the sequence could be reproduced without a great deal of difficulty. I’ve replacedRandomwith a secure generator here:(the Next method isn’t very fast, but might be good enough for your purposes)