Este caso es muy útil para crear llaves únicas a partir de un número long, como puede ser el Timestamp, obteniendo un identificador con una cantidad de caracteres menores a los que pude ser representado por el Timestamp.
Este código tiene las siguientes características
- El algoritmo utiliza un sistema numérico base 64, lo cual significa que tiene 64 símbolos para representar un número decimal.
- La función toBase64 es la función principal la cual esta encargada de convertir un número de tipo entero (long) a su representación numérica de base 64, representada en un string.
- La función secundaría toSingleBase estará encargada de convertir un numero menor a 64 a su representación en el sistema numérico base 64.
- Los caracteres utilizados son los número del 0 al 9, las letras mayúscula y minúsculas, sin caracteres especiales, y dos símbolos adicionales: + y *.
long value = DateTime.Now.Ticks; string strVal = toBase64(value);
private static string toBase64(int n) { string ret = ""; int cosiente = 0; int residuo = 0; if (n < 64) return toSingleBase64(n); residuo = n / 64; cosiente = n % 64; ret = toBase64(residuo) + toBase64(cosiente); return ret; } private static string toSingleBase64(int n) { string ret = null; if(n < 0) ret = "0"; if (n < 10) ret = "" + n; else { if (n >= 10 && n < 36) { n = n - 10; n = 65 + n; //65 inicia el caracte 'A' (Mayusculas) ret = "" + (char)n; } else if (n >= 36 && n < 62) { n = n - 36; n = 97 + n; //97 inicia el caracte 'a' (minusculas) ret = "" + (char)n; } else if (n >= 62 && n <= 63) { n = n - 62; n = 42 + n; //42 inicia el caracter '+', seguido por el caracter '*'. ret = "" + (char)n; } else ret = "0"; } return ret; }