最近遇到一个比较奇葩的事情,自己所负责的一个系统出现一个流水号用完的问题;正常情况下,流水号用完应该增加多位来解决这个问题。鉴于各种因素,最后决定:位数不变,增加字母进去,当数字用完后,会出现字母,而且规则还有点绕!!

        

看到这样的规则后,不由感觉不是一般的绕啊,又由于项目是用ASP来做的,所以用Asp 语言实现。(呵呵,估计现在的都很少来做得了)

为了害怕自己忘记,赶紧将这规则的大体的算法记录下来.

算法过程:

<%
'max_dimension_no=right(max_dimension_no,len(max_dimension_no)-1)
max_dimension_no="B099"
max_dimension_no="Z999"
max_dimension_no="ZZ99"
max_dimension_no="ZZZ9"
max_dimension_no="9999"
'max_dimension_no="AB096"
'max_dimension_no="AZ999"
length_subcode=4
response.Write("---max_dimension_no:"&max_dimension_no &"<br>")
ii=1
'从9999到ZZZZ ---ii:269461----gen code max_dimension_no:ZZZZ
'while not max_dimension_no="ZZZZ"
for ii=1 to 269463
'length_subcode=len(right(max_dimension_no,len(max_dimension_no)-1))'可以根据此选项改变subcode的位数
response.Write("------------------------------<br>")
'全数字
if IsNumeric(max_dimension_no) then
if clng(max_dimension_no)<clng(gensubcode_maxvalue(length_subcode,9)) then
max_dimension_no=max_dimension_no+1
elseif clng(max_dimension_no)=clng(gensubcode_maxvalue(length_subcode,9)) then '临界点
max_dimension_no="A"+ gensubcode_maxvalue(clng(length_subcode-1),0)
end if
else
'字母和数字混合
'判断字母和数字分界点
dim char_part_ASCVaule
char_part_ASCVaule=""
for i=1 to len(max_dimension_no)
'response.Write("i:"&mid(max_dimension_no,i,1)&"<br>")
if not IsNumeric(mid(max_dimension_no,i,1)) then
'写入数组
'response.Write("ascii_value:"&asc(mid(max_dimension_no,i,1))&"<br>")
char_part_ASCVaule=char_part_ASCVaule&asc(mid(max_dimension_no,i,1))&"$"
char_location=i
'response.Write("char_part_ASCVaule:"& char_part_ASCVaule&"<br>")
end if
next
' response.Write("char_part_ASCVaule:"& char_part_ASCVaule &"<br>")
' response.Write("char_location:"& char_location &"<br>")

if char_location=length_subcode then
IsStopCheck=false
for p=length_subcode to 1 step-1
if clng(asc(mid(max_dimension_no,p,1)))>=90 then
IsStopCheck=true
else
IsStopCheck=false
end if
next
if IsStopCheck then
response.Write("this running number is use out!")
response.End()
end if
end if

'比较生成
'拆分数字部分和文字部分
num_part=mid(max_dimension_no,clng(char_location)+1,len(max_dimension_no))
char_part=mid(max_dimension_no,1,char_location)
' response.Write("char_location:"& char_location &"<br>")
' response.Write("char_part_ASCVaule:"& char_part_ASCVaule&"<br>")
' response.Write("num_part:"&num_part&"&nbsp;&nbsp;lenght_num_part:"&len(num_part)&"<br>")
'正常生数
if num_part<> "" then '字母与数字混合
if clng(num_part)<clng(gensubcode_maxvalue(len(num_part),9)) then
'response.Write("clng(num_part)+1"&clng(num_part)+1&"<br>")
'response.Write("len(num_part)"&len(num_part)&"<br>")

num_part=gensubcode_numpart(clng(num_part)+1,len(num_part),0)
max_dimension_no=char_part&num_part
'数字和字母的临界点
elseif clng(num_part)=clng(gensubcode_maxvalue(len(num_part),9)) and num_part<>"" then
num_part=gensubcode_numpart(clng(num_part)+1,len(num_part),0)
char_part_len=length_subcode-last_num_part_len
char_part=""
Arr_char_part_ASCVaule=split(left(char_part_ASCVaule,len(char_part_ASCVaule)-1),"$")
char_arry=clng(UBound(Arr_char_part_ASCVaule))

if Arr_char_part_ASCVaule(char_arry)<90 then
Arr_char_part_ASCVaule(char_arry)=Arr_char_part_ASCVaule(char_arry)+1
for k=0 to char_arry
char_part=char_part&chr(Arr_char_part_ASCVaule(k))
next
num_part=gensubcode_maxvalue(length_subcode-char_arry-1,0)'ps
max_dimension_no=char_part&num_part

elseif Arr_char_part_ASCVaule(char_arry)>=90 then
Arr_char_part_ASCVaule(char_arry)=65

if char_arry=0 then
char_part="A"& chr(Arr_char_part_ASCVaule(char_arry))
'num_part=gensubcode_maxvalue(length_subcode-char_arry-1,0)
max_dimension_no=char_part&num_part

elseif char_arry>0 then

' response.Write("UBound(Arr_char_part_ASCVaule):"&UBound(Arr_char_part_ASCVaule)&"<br>")
' response.Write("LBound(Arr_char_part_ASCVaule):"&LBound(Arr_char_part_ASCVaule)&"<br>")
Isaddmore_dital=false
for j=char_arry-1 to LBound(Arr_char_part_ASCVaule) step -1
if Arr_char_part_ASCVaule(j)<90 then
Arr_char_part_ASCVaule(j)=Arr_char_part_ASCVaule(j)+1
exit for
elseif Arr_char_part_ASCVaule(j)>=90 AND j=LBound(Arr_char_part_ASCVaule) then
'进位
Arr_char_part_ASCVaule(j)=65
Isaddmore_dital=true
elseif Arr_char_part_ASCVaule(j)>=90 and j<>LBound(Arr_char_part_ASCVaule) then
'不进位
Arr_char_part_ASCVaule(j)=65
'response.Write(j&"<br>")
'Arr_char_part_ASCVaule(j+1)=Arr_char_part_ASCVaule(j+1)+1
end if
next

for l=0 to char_arry
char_part=char_part&chr(Arr_char_part_ASCVaule(l))
next
num_part=gensubcode_maxvalue(length_subcode-char_arry-1,0)'ps
if Isaddmore_dital then
char_part="A"&char_part
num_part=gensubcode_maxvalue(length_subcode-len(char_part),0)'ps
end if
max_dimension_no=char_part&num_part
end if
end if
end if
else'全字母
if char_location=length_subcode then
Arr_char_part_ASCVaule=split(left(char_part_ASCVaule,len(char_part_ASCVaule)-1),"$")
for n=ubound(Arr_char_part_ASCVaule) to lbound(Arr_char_part_ASCVaule) step-1
if Arr_char_part_ASCVaule(n)<90 then
Arr_char_part_ASCVaule(n)=Arr_char_part_ASCVaule(n)+1
exit for
end if
next
char_part=""
for o=0 to ubound(Arr_char_part_ASCVaule)
char_part=char_part&chr(Arr_char_part_ASCVaule(o))
next

max_dimension_no=char_part
end if
end if

end if

response.Write("---ii:"&ii&"----gen code max_dimension_no:"&max_dimension_no&"<br>")
response.Write("------------------------------<br>")
next
'ii=ii+1
'WEND

function gensubcode_numpart(detailvalue,length,fillaga_value)
dim tempstr
tempstr=""
If len(detailvalue)<= clng(length) then

for i=1 to clng(length)-len(detailvalue)
tempstr=tempstr&fillaga_value
next
gensubcode_numpart=tempstr&detailvalue
elseif len(detailvalue)> clng(length) then
for i=1 to clng(length)-1
tempstr=tempstr&fillaga_value
next
gensubcode_numpart=tempstr
end if
end function

function gensubcode_maxvalue(Length,RoundValue)
dim tempstr
tempstr=""
if Length>=1 then
for i=1 to Length
tempstr=cstr(tempstr)&cstr(RoundValue)
next
gensubcode_maxvalue=tempstr
end if
end function
%>

以上实现的过程,注释和循环要忽略掉,因为方便自己自己调试和看结果的。

数字与字母混合生成流水号规则--ASP实现的更多相关文章

  1. Excel中数字和字母混合时提取某些字符进行排序

    在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...

  2. iOS开发密码输入数字和字母混合

    #import "TestInPut.h" @implementation TestInPut +(BOOL)judgePassWordLegal:(NSString *)pass ...

  3. .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压

    以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  4. javascript原生 实现数字字母混合验证码

    实现4位数 数字字母混合验证码(数字+大写字母+小写字母) ASCII 字符集中得到3个范围: 1. 48-57 表示数字0-9 2. 65-90 表示大写字母 3. 97-122 表示小写字母 范围 ...

  5. C#导入Excel遇到数字字母混合列数据丢失解决

    错误重现: ----------------------------------------------------------------------- 在导入Excel读取数据时,其中的一个字段保 ...

  6. 随机生成N个字符(包含数字和字母)

    '************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...

  7. Java基础之随机生成数字和字母

    字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information I ...

  8. QTP_随机生成N个字符(包含数字和字母)

    '************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...

  9. C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密

    要求:密码必须包含数字和字母 思路:1.列出数字和字符. 组成字符串 :chars 2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数. 3. 随机取不小于chars长 ...

随机推荐

  1. freeswitch呼叫流程分析

    今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...

  2. ASP.NET Cookie(二)--控制Cookie的范围

    默认情况下,一个站点的全部Cookie都一起存储在客户端上,而且所有Cookie都会随着对该站点发送的任何请求一起发送到服务器.也就是说,一个站点中的每个页面都能获得该站点的所有Cookie.但是,可 ...

  3. mysql limit分页查询优化写法

    在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用orderby排 序.但是在表数据量比较大的时候,例如查询语句片段limit 10000, 20,数据库会读取10020条 ...

  4. linux 安装mysql数据库——tar.gz包解压安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上的tar.gz包解压安装法, 先通过mysql官网或者网络资源下载 mysql-5.7.3-m13-linux-glibc2.5-x86_ ...

  5. Spring 事务详解

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  6. float4与half4数据类型

    连续4个32位float类型数的向量 HLSL数据类型 GPU是以四维向量为基本单位来计算的.4个浮点数所组成的float4向量是GPU内置的最基本类型.使用GPU对两个float4向量进行计算,与C ...

  7. 简单深入SpringMvc

    简单深入SpringMvc 一.如何让一个普通类成为Controller? 方案一:实现接口Controller解析:handleRequest(request,response) 方案二:继承Abs ...

  8. [No0000A9]实用word用法

    目录  TOC \o "1-3" \h \z \u 三招去掉页眉那条横线.... PAGEREF _Toc465252982 \h 08D0C9EA79F9BACE118C8200 ...

  9. 如何将网页的title前面的图标替换成自己的图标

    首先要准备自己的图标,图标必须是.ico格式的图片,网上有很多在线工具可以将自己的图片转换成ico格式的图片,这里给大家介绍两个网站 在线ico转换工具:生成的图标是可以选尺寸的,原图片的大小不限制 ...

  10. canvas贝塞尔曲线 - 2

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAH7CAIAAAARkv1vAAAgAElEQVR4nOy9e5Ab13ngO7Z37dlsaM