zoukankan      html  css  js  c++  java
  • C#根据字符串生成唯一的数字

        根据字符串生成唯一的数字标识, 一般我们都会采用GUID, 根据字符串计算MD5, 计算出来的MD5码就是一个GUID.

        但是GUID太长了, 是一个128位的数字, 在存储的时候, 会很占地方, 考虑能不能生成一个短一点的数字, 比如32为的数字, 搜了搜, 有人给出了这样的方法.

        : 我们可以将一个标准的GUID 21726045-e8f7-4b09-abd8-4bcc926e9e28 转换成短的字符串 3c4ebc5f5f2c4edc

    下面的方法会生成一个短的字符串,并且这个字符串是唯一的。重复1亿次都不会出现重复的,它也是依照GUID的唯一性来生成这个字符串的。

            private string GenerateStringID()
            {
                
    long i = 1;
                
    foreach (byte b in Guid.NewGuid().ToByteArray())
                {
                    i 
    *= ((int)b + 1);
                }
                
    return string.Format("{0:x}", i - DateTime.Now.Ticks);
            }

    如果想生成一个数字序列而不是字符串,你将会获得一个19位长的序列。下面的方法会把GUID转换为Int64的数字序列。

            private long GenerateIntID()
            {
                
    byte[] buffer = Guid.NewGuid().ToByteArray();
                
    return BitConverter.ToInt64(buffer, 0);
            }

    看起来这个方法是可行的, 但是暂时没有找到严谨的数据论证, 可以保证多高的不冲突性能. 毕竟是做key值, 如果有一个重复, 程序就挂了.

  • 相关阅读:
    VC++:创建,调用Win32静态链接库
    VC++:创建,调用Win32动态链接库
    C++生成和解析XML文件
    C++实现16进制字符串转换成int整形值
    一个好隐蔽的C/C++代码bug
    【C++札记】标准模板库string
    Rabbitmq C++客户端 Rabbitmq Client
    C++:标准模板库map
    C++:标准模板库vector
    C++:标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/dunnice/p/2108622.html
Copyright © 2011-2022 走看看