Base 62 est utilisé par tinyurl et bit.ly pour les URL abrégées. C'est une méthode bien comprise pour créer des identifiants "uniques", lisibles par l'homme. Bien sûr, vous devrez stocker les identifiants créés et vérifier les doublons lors de la création pour garantir l'unicité. (Voir le code en bas de la réponse)
Métriques d'unicité en base 62
5 caractères en base 62 vous donneront 62^5 identifiants uniques = 916,132,832 (~1 milliard) En générant 10 000 identifiants par jour, vous serez bon pour 91k+ jours
6 caractères en base 62 vous donneront 62^6 identifiants uniques = 56,800,235,584 (56+ milliards) En générant 10 000 identifiants par jour, vous serez bon pour 5+ millions de jours
Métriques d'unicité en base 36
6 caractères vous donneront 36^6 identifiants uniques = 2,176,782,336 (2+ milliards)
7 caractères vous donneront 36^7 identifiants uniques = 78,364,164,096 (78+ milliards)
Code:
public void TestRandomIdGenerator()
{
// créer cinq identifiants de six caractères en base 62
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase62(6));
// créer cinq identifiants de huit caractères en base 36
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase36(8));
}
public static class RandomIdGenerator
{
private static char[] _base62chars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
.ToCharArray();
private static Random _random = new Random();
public static string GetBase62(int length)
{
var sb = new StringBuilder(length);
for (int i=0; i
`Sortie:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7`
0 votes
Pourquoi ne pas utiliser un INT ou BIGINT qui est auto-incrémenté ? C'est probablement le plus lisible et peut facilement gérer le volume.
0 votes
Selon la question ci-dessus, essayez de limiter à 5/6 caractères maximum et prenez en charge jusqu'à 9999 nouveaux enregistrements par jour.
0 votes
@Kumar - Et si vous avez besoin de plus de 9999 enregistrements en un jour ? Votre solution proposée ne semble pas réalisable.
0 votes
@ChaosPandion: Je pense que ce sont probablement des estimations approximatives de la charge/trafic plutôt que des limites strictes. Je ne suis pas sûr pourquoi vous voudriez fixer une limite arbitraire sur le nombre de transactions quotidiennes.
0 votes
Vous pourriez le coder en base 64 et l'utiliser. Je ne suis pas sûr que vous puissiez le réduire à un format plus petit tout en utilisant toujours des caractères lisibles. Mais je soutiendrais que le base 64 est bien moins lisible que le base 32 car il nécessite l'ajout d'un qualificatif supplémentaire à la plupart des caractères (f majuscule, o minuscule, o minuscule par rapport à juste f, o, o).