生成大量无重复随机号码

主要是通过递归的方法

public class UBISerials
    {
        public static void MakeSerials(int num,MyRandom rnd,string batchid)
        {       
            //递归调用
            int ierr=InsertSerials(num,rnd,batchid);
            if(ierr>0)
                MakeSerials(ierr,rnd,batchid);
            else
            {
                SqlConnection conn=new SqlConnection(Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["conn"]));
                SqlCommand cmd=new SqlCommand("sp_batchstate",conn);
                //Create PROCEDURE sp_batchstate
                //@batchid nvarchar(50)
                //as
                //update batch set batch_state=0 where batch_id=@batchid
                //GO
                cmd.CommandType=CommandType.StoredProcedure;
                SqlParameter parm1=new SqlParameter("@batchid",SqlDbType.VarChar,50);
                parm1.Value=batchid;
                cmd.Parameters.Add(parm1);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }

        }

        public static int InsertSerials(int num,MyRandom rnd,string batchid)
        {
            int ierr=0;
            SqlConnection conn=new SqlConnection(Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["conn"]));
            SqlCommand cmd=new SqlCommand("sp_addkey",conn);
            //Create PROCEDURE sp_addkey
            //@key nvarchar(50),@batchid nvarchar(50)
            //as
            //insert into keys (keys_key,keys_batch_id)values(@key,@batchid)
            //GO
            cmd.CommandType=CommandType.StoredProcedure;
            SqlParameter parm1=new SqlParameter("@key",SqlDbType.VarChar,50);
            SqlParameter parm2=new SqlParameter("@batchid",SqlDbType.VarChar,50);
            parm2.Value=batchid;
            cmd.Parameters.Add(parm1);
            cmd.Parameters.Add(parm2);
            conn.Open();
            for(int i=0;i<num;i++)
            {
                try
                {
                    parm1.Value=rnd.GetRandomNum();
                    cmd.ExecuteNonQuery();
                }
                catch
                {
                    ierr++;
                }
            }
            conn.Close();
            return ierr;
        }
    }

    public class MyRandom
    {
        private string _strin;
        private string _strout;
        private Random _rnd;

        public MyRandom(string strin)
        {
            _rnd=new Random(System.Environment.TickCount);
            _strin=strin;
        }

        private string GetOneRandomNum(string strformat)
        {
            string strtemp;
            switch(strformat)
            {
                case "*":
                {
                    int itmp=_rnd.Next(36);
                    if(itmp<10)
                        strtemp=_rnd.Next(10).ToString();
                    else
                        strtemp=Convert.ToChar(_rnd.Next(26)+'A').ToString();
                    break;
                }
                case "#":
                {
                    strtemp=_rnd.Next(10).ToString();
                    break;
                }
                case "$":
                {
                    strtemp=Convert.ToChar(_rnd.Next(26)+'A').ToString();
                    break;
                }
                default:
                {
                    strtemp=strformat;
                    break;
                }
            }
            return strtemp;
        }

        public string GetRandomNum()
        {
            _strout=String.Empty;
            for(int i=0;i<_strin.Length;i++)
            {
                _strout+=this.GetOneRandomNum(_strin[i].ToString());
            }
            return _strout;
        }
    }

调用方法:
string batchid;
            DataSet ds=new DataSet();
            SqlConnection conn=new SqlConnection(strconn);
            SqlDataAdapter da=new SqlDataAdapter("sp_selectbatch",conn);
            //Create PROCEDURE sp_selectbatch
            //as
            //select top 1 * from batch where batch_state=1
            //GO
            da.Fill(ds,"batch");
            if(ds.Tables["batch"].Rows.Count==1)
            {
                                batchid=Convert.ToString(ds.Tables["batch"].Rows[0]["batch_id"]);
                UBISerials.MakeSerials(Convert.ToInt32(ds.Tables["batch"].Rows[0]["batch_totalnum"]),new MyRandom(Convert.ToString(ds.Tables["batch"].Rows[0]["batch_format"])),Convert.ToString(ds.Tables["batch"].Rows[0]["batch_id"]));
                            }
        } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值