ASP.net生成各种随机数字,用于优惠券、验证码等

   2023-02-09 学习力0
核心提示:北京网站建设-恒动时空将网上查到的资料收集整理如下:1、利用GUID生成全球唯一标识符,长度为32位,格式如:6F9619FF-8B86-D011-B42D-00C04FC964FF。    SQLSERVER本身可以生成,ASP.NET也可以生成。    最简单的如:GUID guid = Guid.newguid()2、

北京网站建设-恒动时空

将网上查到的资料收集整理如下:

1、利用GUID生成全球唯一标识符,长度为32位,格式如:6F9619FF-8B86-D011-B42D-00C04FC964FF。

    SQLSERVER本身可以生成,ASP.NET也可以生成。

    最简单的如:GUID guid = Guid.newguid()

2、将GUID转为哈希数,然后随机

    Random rand = new Random(Guid.NewGuid().GetHashCode());  

    生成示例:1024588704

3、获取系统启动后经过的毫秒数,然后随机

    Random rnd = new Random(Environment.TickCount);

    生成示例:208439635

4、其他利用GUID生成的的方法示例:   

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

生成:5020365391994185848

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

生成:aded0a2611f8aa4a

5、两个用于生成不重复数字的类

public class RandomNum
{
    private static char[] constant ={
            '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
        };
    public static string GenerateRandom(int Length)
    {
        System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
        Random rd = new Random();
        for (int i = 0; i < Length; i++)
        {
            newRandom.Append(constant[rd.Next(62)]);
        }
        return newRandom.ToString();
    }
}

生成:EV34SOG1RGCV(可控制生成位数)

   

/// <summary>
/// 生成不重复乱码 
/// </summary>
public class RandomNumber
{
    const long MAX = 218340105584895; // ZZZZZZZZ
    const long MIN = 568002355840; // 0a0000000
    const int SeedQuantity = 1; // 随机质量,越大越慢,即使为1质量也不错


    public static long[] getRandom(int size)
    {
        //先取一定倍量的随机种子,再从这些种子里面随机
        long[] seed = getRandomSeeds(size * SeedQuantity);
        long[] ranArr = new long[size];


        Random rand = new Random();
        for (int i = 0; i < size; i++)
        {
            int j = rand.Next(seed.Length - i);
            ranArr[i] = seed[j];
            seed[j] = seed[seed.Length - 1 - i];
        }
        return ranArr;
    }


    private static long[] getRandomSeeds(int size)
    {
        long[] ranArr = new long[size];
        for (int i = 0; i < size; i++)
        {
            ranArr[i] = GetNext(i);
        }
        Array.Sort(ranArr); // 排序


        List<int> seedRepeatPosition = new List<int>();
        // 遍历一遍将重复的记录下来
        long last = 0;
        for (int i = 0; i < ranArr.Length; i++)
        {
            if (ranArr[i] == last)
            {
                ranArr[i] = 0;
                seedRepeatPosition.Add(i);
            }
            else
                last = ranArr[i];
        }


        Array.Sort(ranArr); // 排序
        // 将重复的重新处理为不重复的
        List<long> newseedList = new List<long>();
        long newseed;
        for (int i = 0; i < seedRepeatPosition.Count; i++)
        {
            do
            {


                newseed = GetNext(i);
            } while (Array.BinarySearch(ranArr, newseed) > -1 || newseedList.Contains(newseed));


            newseedList.Add(newseed);
            ranArr[seedRepeatPosition[i]] = newseed;


        }


        return ranArr;


    }
    private static long GetNext(int seed)
    {
        int initSeed = (int)(DateTime.Now.Ticks - seed * 10000);
        Random ran = new Random(initSeed);
        double d;
        long ret;


        do
        {
            d = ran.NextDouble();
            ret = Convert.ToInt64(d * (Math.Pow(10, 15)));
        }
        while (ret <= MIN || ret > MAX);


        return ret;
    }
}

生成示例:217654655788864

6、其它

    还可以利用当前时间的Ticks属性来获取不重复的数字,

    如:DateTime.Now.Ticks

    生成示例:634903854555468750

    或者利用MD5

7.取时间戳生成随即数生成10位流水号

/// <summary>
/// 取时间戳生成随即数生成10位流水号
/// </summary>
/// <returns></returns>
public static UInt32 UnixStamp()
{
    TimeSpan ts = DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
    return Convert.ToUInt32(ts.TotalSeconds);
}

8.随机数生成方法

/// <summary>
/// 取随机数
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public static string BuildRandomStr(int length)
{
    Random rand = new Random();

    int num = rand.Next();

    string str = num.ToString();

    if (str.Length > length)
    {
        str = str.Substring(0, length);
    }
    else if (str.Length < length)
    {
        int n = length - str.Length;
        while (n > 0)
        {
            str.Insert(0, "0");
            n--;
        }
    }

    return str;
}

9.C# 生成一个时间戳

/// 获取时间戳  
/// </summary>  
/// <returns></returns>  
public static string GetTimeStamp()  
{  
    TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);  
    return Convert.ToInt64(ts.TotalSeconds).ToString();  
}

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 使用WebClient自动填写并提交ASP.NET页面表单的源代码
    使用WebClient自动填写并提交ASP.NET页面表单的
    转自:http://www.cnblogs.com/anjou/archive/2007/03/07/667253.html 在.NET中通过程序填写和提交表单还是比较简单。比如,要提交一个如下图所示的登录表单:           填写和提交以上表单的代码如下:       // 要提交表单的URI字符串
    02-09
  • asp.net mvc多条件+分页查询解决方案
    


            
asp.net mvc多条件+分页查询解决方案
    asp.net mvc多条件+分页查询解决方案
    http://www.cnblogs.com/nickppa/p/3232535.html开发环境vs2010css:bootstrapjs:jquery    bootstrap paginator原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了MVC多条件+分页查询因为美工不是很好,所以用的是
    02-09
  • ASP.NET操作Cookies的问题(Bug or Not)
    以下存和取都是在不同的页面中,如果是在同一个页面也没必要用cookies了。 Test1: 给Cookies赋值: const string AAA="aaa"; Response.Cookies[AAA].Value = "111;222;333"; 取值: string value = Request.Cookies[AAA].Value; // value为111 Test2: 给Cooki
    02-09
  • Asp.Net Core 自定义验证属性
      很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性。所以这一篇我们就来介绍一下怎么自定义验证属性。  我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自ValidationAttribute的类,然后在实现其IsVal
    02-09
  • Asp.Net 之 枚举类型的下拉列表绑定
    有这样一个学科枚举类型:/// 学科 /// /summary public enum Subject {None = 0,[Description("语文")]Chinese = 1,[Description("数学")]Mathematics = 2,[Description("英语")]English = 3,[Description("政治")]Politics = 4,[Description("物理&qu
    02-09
  • [ASP.NET笔记] 1.Web基础知识
         1:http协议:     2:web服务器:     3:静态网页的概念     4:动态网页的概念       http协议:http(hypertext transfer protocol) 即超文本传输协议,这个协议是在internet上进行信息传送的协议任何网页之间要相互沟通,必须要尊循
    02-09
  • ASP.NET邮件发送 .net 发送邮件
      今天做了个ASP.NET做发送邮件功能,发现QQ邮箱好奇怪,当你用QQ邮箱做服务器的时候什么邮件都发送不出去(QQ邮箱除外)。而且爆出这样的错误:"邮箱不可用。 服务器响应为: Error: content rejected.http://mail.qq.com/zh_CN/help/content/rejectedmail.ht
    02-09
  • 由ASP.NET Core根据路径下载文件异常引发的探究
    前言    最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架。由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行下载。这其中遇到了一个问题,是关于如何提供文件路径的,通
    02-09
  • ASP.NET的运行原理与运行机制 ASP.NET的开发模式包括
    ASP.NET的运行原理与运行机制 ASP.NET的开发模
    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebForms这种模仿Windows Form编程方式有了很大不同,不再有大量控件和控件生成的大量不够灵活的代码
    02-09
  • ASP.NET 后台接收前台POST过来的json数据方法
     ASP.NET前后台交互之JSON数据 https://www.cnblogs.com/ensleep/p/3319756.html
    02-09
点击排行