c# - remarks - Genera una identificación única
summary returns c# (7)
¿Por qué no podemos hacer una identificación única como a continuación?
Podemos usar DateTime.Now.Ticks y Guid.NewGuid (). ToString () para combinarlos y crear una identificación única.
A medida que se agrega DateTime.Now.Ticks, podemos averiguar la fecha y la hora en segundos en que se crea el ID único.
Por favor mira el código.
var ticks = DateTime.Now.Ticks;
var guid = Guid.NewGuid().ToString();
var uniqueSessionId = ticks.ToString() +''-''+ guid; //guid created by combining ticks and guid
var datetime = new DateTime(ticks);//for checking purpose
var datetimenow = DateTime.Now; //both these date times are different.
Incluso podemos tomar la parte de las marcas en una identificación única y verificar la fecha y la hora más tarde para futuras referencias.
Soy un estudiante en la universidad y nuestra tarea es crear un motor de búsqueda. Tengo dificultades para generar una identificación única para asignar a cada url cuando se agrega a la frontera. Intenté usar el algoritmo hash SHA-256 y Guid. Aquí está el código que utilicé para implementar el guid:
public string generateID(string url_add)
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000);
return number;
}
¿Por qué no usar GUID ?
Guid guid = Guid.NewGuid();
string str = guid.ToString();
¿Por qué no usar ToString?
public string generateID()
{
return Guid.NewGuid().ToString("N");
}
Si desea que se base en una URL, simplemente puede hacer lo siguiente:
public string generateID(string sourceUrl)
{
return string.Format("{0}_{1:N}", sourceUrl, Guid.NewGuid());
}
Si desea ocultar la URL, podría usar alguna forma de SHA1 en el sourceURL, pero no estoy seguro de lo que podría lograr.
Aquí hay un ''ID de YouTube-video'' como generador de ID, por ejemplo, "UcBKmq2XE5a"
StringBuilder builder = new StringBuilder();
Enumerable
.Range(65, 26)
.Select(e => ((char)e).ToString())
.Concat(Enumerable.Range(97, 26).Select(e => ((char)e).ToString()))
.Concat(Enumerable.Range(0, 10).Select(e => e.ToString()))
.OrderBy(e => Guid.NewGuid())
.Take(11)
.ToList().ForEach(e => builder.Append(e));
string id = builder.ToString();
Crea identificadores aleatorios de tamaño 11 caracteres. Puede aumentar / disminuir eso también, simplemente cambie el parámetro del método Take.
0.001% duplica en 100 millones.
Esta pregunta parece ser respondida; sin embargo, para completarla, agregaría otro enfoque.
Puede usar un generador de números de identificación único que se basa en el generador de identificadores Snowflake de Twitter. La implementación de C # se puede encontrar here .
var id64Generator = new Id64Generator();
// ...
public string generateID(string sourceUrl)
{
return string.Format("{0}_{1}", sourceUrl, id64Generator.GenerateId());
}
Tenga en cuenta que una de las características más agradables de ese enfoque es la posibilidad de tener múltiples generadores en nodos independientes (probablemente algo útil para un motor de búsqueda) generando identificadores únicos en tiempo real en tiempo real.
// node 0
var id64Generator = new Id64Generator(0);
// node 1
var id64Generator = new Id64Generator(1);
// ... node 10
var id64Generator = new Id64Generator(10);
Prueba esto.
string a = DateTime.Now.Month.ToString() +
DateTime.Now.Day.ToString() +
DateTime.Now.Year.ToString() +
DateTime.Now.Hour.ToString() +
DateTime.Now.Minute.ToString() +
DateTime.Now.Second.ToString() +
DateTime.Now.Millisecond.ToString();
Si quieres usar sha-256 (la guía sería más rápida), entonces necesitarías hacer algo como
SHA256 shaAlgorithm = new SHA256Managed();
byte[] shaDigest = shaAlgorithm.ComputeHash(ASCIIEncoding.ASCII.GetBytes(url));
return BitConverter.ToString(shaDigest);
Por supuesto, no tiene que ascii y puede ser cualquier otro tipo de algoritmo hash también