zoukankan      html  css  js  c++  java
  • 【C#】【Demo】生成编号算法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace CommonUtil
    {
    
        /// <summary>
        /// 公共简易算法
        /// </summary>
        public static class UtilAlgorithm
        {
            #region 生成编号
            //生成编号显示字符,原始
            static readonly char[] NO_patternOld = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'X', 'Y' };
            //生成编号显示字符,乱序
            static readonly char[] NO_pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'X', 'Y' };
            static readonly List<char> NO_patternList = NO_pattern.ToList();
            /// <summary>
            /// 生成编号
            /// </summary>
            /// <param name="len">编号位数</param>
            /// <param name="v">编号数值</param>
            /// <returns></returns>
            public static string NO_CreateNumberString(int len, out int[] v)
            {
                //生成len个小于_pattern.Length的整数
                Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
                v = new int[len];
                string nu = "";
                for (int i = 0; i < len; i++)
                {
                    v[i]= random.Next(0, NO_pattern.Length);
                    nu += NO_pattern[v[i]];
                }
                return nu;
            }
    
            /// <summary>
            /// 下一个编号
            /// </summary>
            /// <returns></returns>
            public static string NO_NumberStringNext(string nu)
            {
                var v = NO_NumberStringToInts(nu);
                v = NO_IntsNext(v);
                return NO_IntsToNumberString(v);
            }
    
            /// <summary>
            /// int数组转编号字符
            /// </summary>
            /// <param name="nu"></param>
            /// <returns></returns>
            public static string NO_IntsToNumberString(int[] v)
            {
                string nu = "";
                for (int i = 0; i < v.Length; i++)
                {
                    nu += NO_pattern[v[i]];
                }
                return nu;
            }
            /// <summary>
            /// 编号字符转int数组
            /// </summary>
            /// <param name="nu"></param>
            /// <returns></returns>
            public static int[] NO_NumberStringToInts(string nu) 
            {
                int[] v = new int[nu.Length];
                for (int i = 0; i < nu.Length; i++)
                {
                    v[i] = NO_patternList.IndexOf(nu[i]);
                }
                return v;
            }
    
            /// <summary>
            /// int数组下一个编号
            /// </summary>
            /// <param name="v"></param>
            /// <returns></returns>
            public static int[] NO_IntsNext(int[] v,int? index=null) 
            {
                int i = index ?? v.Length - 1;
                if (i < 0) 
                {
                    //无法增加
                    throw new Exception("CreateReportNumberLast 超出界限");
                    return null;
                }
                if (v[i] < NO_pattern.Length - 1)
                {
                    v[i]++;
                    return v;
                }
                else
                {
                    v[i] = 0;
                    return NO_IntsNext(v, i - 1);
                }
            }
            #endregion
        }
    }
  • 相关阅读:
    open_basedir restriction in effect,解决php引入文件权限问题 解决方法
    Linux增加虚拟内存方法
    centos下kill、killall、pkill命令区别
    正则表达式全集
    Mysql中外键的 Cascade ,NO ACTION ,Restrict ,SET NULL
    配置frp实现内网穿透
    解决微信授权回调页面域名只能设置一个的问题 [php]
    高性能Mysql主从架构的复制原理及配置详解
    【Git】工作中99%能用到的git命令
    SVN服务器搭建和使用
  • 原文地址:https://www.cnblogs.com/lanofsky/p/15789738.html
Copyright © 2011-2022 走看看