当前位置:  编程技术>.net/c#/asp.net

C#生成唯一值的方法汇总

    来源: 互联网  发布时间:2014-10-24

    本文导语:  生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试: 一、在 .NET 中生成 1、直接用.NET Framework 提供的 Guid() 函数,此种方法使用非常广泛。GUID(全局统一...

生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试:

一、在 .NET 中生成

1、直接用.NET Framework 提供的 Guid() 函数,此种方法使用非常广泛。GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的任何两台计算机都不会生成重复的 GUID 值(即保证所有机器都是唯一的)。关于GUID的介绍在此不作具体熬述,想深入了解可以自行查阅MSDN。代码如下:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string _guid = GetGuid();
            Console.WriteLine("唯一码:{0}t长度为:{1}n去掉连接符:{2}", _guid, _guid.Length, _guid.Replace("-", ""));

            string uniqueIdString = GuidTo16String();
            Console.WriteLine("唯一码:{0}t长度为:{1}", uniqueIdString, uniqueIdString.Length);

            long uniqueIdLong = GuidToLongID();
            Console.WriteLine("唯一码:{0}t长度为:{1}", uniqueIdLong, uniqueIdLong.ToString().Length);

        }

        ///
        /// 由连字符分隔的32位数字
        ///
        ///
        private static string GetGuid()
        {
            System.Guid guid = new Guid();
            guid = Guid.NewGuid();
            return guid.ToString();
        }

        ///  
        /// 根据GUID获取16位的唯一字符串 
        ///  
        ///  
        ///  
        public static string GuidTo16String()
        {
            long i = 1;
            foreach (byte b in Guid.NewGuid().ToByteArray())
                i *= ((int)b + 1);

            return string.Format("{0:x}", i - DateTime.Now.Ticks);
        }

        ///  
        /// 根据GUID获取19位的唯一数字序列 
        ///  
        ///  
        public static long GuidToLongID()
        {
            byte[] buffer = Guid.NewGuid().ToByteArray();
            return BitConverter.ToInt64(buffer, 0);
        }  

    }
}

2、用 DateTime.Now.ToString("yyyyMMddHHmmssms") 和 .NET Framework 提供的 RNGCryptoServiceProvider() 结合生成,代码如下:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string uniqueNum = GenerateOrderNumber();
            Console.WriteLine("唯一码:{0}t 长度为:{1}", uniqueNum, uniqueNum.Length);

            //测试是否会生成重复
              Console.WriteLine("时间+RNGCryptoServiceProvider()结合生成的唯一值,如下:");
            string _tempNum = string.Empty;
            for (int i = 0; i < 1000; i++)
            {
                string uNum = GenerateOrderNumber();
                Console.WriteLine(uNum);
                if (string.Equals(uNum, _tempNum))
                {
                    Console.WriteLine("上值存在重复,按Enter键继续");
                    Console.ReadKey();
                }

                //Sleep当前线程,是为了延时,从而不产生重复值。可以把它注释掉测试看
                Thread.Sleep(300);

                _tempNum = uNum;
            }

        }

        ///
        /// 唯一订单号生成
        ///
        ///
        public static string GenerateOrderNumber()
        {
            string strDateTimeNumber = DateTime.Now.ToString("yyyyMMddHHmmssms");
            string strRandomResult = NextRandom(1000, 1).ToString();

            return strDateTimeNumber + strRandomResult;
        }

        ///
        /// 参考:msdn上的RNGCryptoServiceProvider例子
        ///
        ///
        ///
        ///
        private static int NextRandom(int numSeeds, int length)
        {
            // Create a byte array to hold the random value. 
            byte[] randomNumber = new byte[length];
            // Create a new instance of the RNGCryptoServiceProvider. 
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            // Fill the array with a random value. 
            rng.GetBytes(randomNumber);
            // Convert the byte to an uint value to make the modulus operation easier. 
            uint randomResult = 0x0;
            for (int i = 0; i < length; i++)
            {
                randomResult |= ((uint)randomNumber[i]


    
 
 

您可能感兴趣的文章:

  • c#如何生成Excel(.xls和.xlsx)文件
  • C# Guid.NewGuid生成随机数的例子
  • C#生成随机字符串的实例
  • C#随机生成Unicode类型字符串
  • c#生成随机数示例分享
  • C#实现在两个数字之间生成随机数的方法
  • c# 生成随机时间的小例子
  • 生成不重复随机数列表的c#代码
  • C#生成注册码的小例子
  • C#生成MD5的函数代码
  • C#实现动态生成表格的方法
  • unix/linux知识 iis7站长之家
  • C#生成设置范围内的Double类型随机数的方法
  • C#生成单页静态页简单实例
  • C#生成加密的16位随机数的代码
  • 一段C#生成随机验证码的代码
  • 基于C#生成随机数示例
  • c#生成缩略图的实现方法
  • c#生成缩略图不失真的简单示例
  • asp.net(c#) 使用Rex正则来生成字符串数组的代码
  • C#随机生成不重复字符串的两个不错方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • java里有没有什么方法能够生成一个唯一标识的
  • google api生成二维码的方法
  • Python3实现生成随机密码的方法
  • php 自动生成订单编号二种方法
  • 把java源程序生成应用程序有哪些方法?
  • Java生成随机数的2种示例方法代码
  • 实现core文件自动生成配置文件的方法
  • 请问VC生成的控件怎么在JAVA里面调用,就是显示在网页上,里面的方法可以实现?
  • PHP生成数组再传给js的方法
  • 在jbuilder7中怎样自动生成get和色set方法
  • PHP中实现生成静态文件的方法缓解服务器压力
  • 用Python脚本生成Android SALT扰码的方法
  • MySQL中随机生成固定长度字符串的方法
  • 基于Java生成GUID的实现方法
  • php 生成订单号二种方法
  • PHP生成指定长度随机数最简洁的方法
  • php生成excel文件的简单方法
  • c++生成dll使用python调用dll的方法
  • jquery弹窗插件colorbox绑定动态生成元素的方法
  • Python生成pdf文件的方法
  • linux c下利用srand和rand函数生成随机字符串
  • 用JBuilder能将java程序生成exe可执行文件吗?如何生成?
  • Linux下c基于openssl生成MD5的函数
  • 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件?
  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • 高分求jsp中动态生成图片的相关资料、生成svg格式和pdf格式的资料,不够再加分
  • php中session_id()函数详细介绍,会话id生成过程及session id长度
  • 如何使用arm-uclibc-gcc将.c文件编译生成.a,将.c文件编译生成.cgi?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 如何指定用javac编译生成类的存放路径。(最好不要告诉我再生成之后再把文件流重新到出这种)




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3