数字与字母混合生成流水号规则--ASP实现
最近遇到一个比较奇葩的事情,自己所负责的一个系统出现一个流水号用完的问题;正常情况下,流水号用完应该增加多位来解决这个问题。鉴于各种因素,最后决定:位数不变,增加字母进去,当数字用完后,会出现字母,而且规则还有点绕!!
        
看到这样的规则后,不由感觉不是一般的绕啊,又由于项目是用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&"  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实现的更多相关文章
- Excel中数字和字母混合时提取某些字符进行排序
		
在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...
 - iOS开发密码输入数字和字母混合
		
#import "TestInPut.h" @implementation TestInPut +(BOOL)judgePassWordLegal:(NSString *)pass ...
 - .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 ...
 - javascript原生 实现数字字母混合验证码
		
实现4位数 数字字母混合验证码(数字+大写字母+小写字母) ASCII 字符集中得到3个范围: 1. 48-57 表示数字0-9 2. 65-90 表示大写字母 3. 97-122 表示小写字母 范围 ...
 - C#导入Excel遇到数字字母混合列数据丢失解决
		
错误重现: ----------------------------------------------------------------------- 在导入Excel读取数据时,其中的一个字段保 ...
 - 随机生成N个字符(包含数字和字母)
		
'************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...
 - Java基础之随机生成数字和字母
		
字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information I ...
 - QTP_随机生成N个字符(包含数字和字母)
		
'************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...
 - C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密
		
要求:密码必须包含数字和字母 思路:1.列出数字和字符. 组成字符串 :chars 2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数. 3. 随机取不小于chars长 ...
 
随机推荐
- js中的constructor
			
定义和用法 constructor 属性返回对创建此对象的 Date 函数的引用. 语法 object.constructor constructor属性不影响任何JavaScript的内部属性.in ...
 - 遇到的Exception/error及解决办法记录汇总
			
一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常 ...
 - 数据结构(c语言)之学生信息管理系统
			
程序思维导图 代码表示(代码参考:长春大学-牛言涛老师) 如有错误请指出欢迎交流 #include<stdio.h> #include<malloc.h>//动态存储分配函数头 ...
 - 安装TFS2015后启用生成功能
			
安装了TFS2015后,发现高大上呀.可是在传了个DEMO,BUILD生成的时候提示没有 一些文件,提示:找不到具有以下功能的代理: msbuild, visualstudio.在服务端安了VS201 ...
 - C#相关开发视频
			
Quickly Generate C# Classes from JSON Responses .NET Compiler Platform ("Roslyn") for the ...
 - POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
			
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
 - python爬虫学习(9) —— 一些工具和语法
			
1. Beautiful Soup 在它的官网有这样一段话: You didn't write that awful page. You're just trying to get some data ...
 - struts2中值栈
			
值栈中的两个逻辑部分: 1.属性context,为OGNLContext类型,实际为ActionContext对象的一个引用,本质是一个Map,里面存放的各种Map,如request,session, ...
 - [LeetCode] Interleaving String 交织相错的字符串
			
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...
 - [LeetCode] Merge k Sorted Lists 合并k个有序链表
			
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...