QQ:6450046

编码器系统中,字符和数字混合递增形成顺序号的解决方案

    在编码器系统中,编码的形成是按照预先定义好的编码规则的。企业的编码规则各式各样,在对顺序号的编码形成规则上一般分为这样几种:
         1、全部由0-9数字形成;000-999
         2、全部由大小写英文字母组成;AAA-ZZZ
         3、字母和数字一起组成;A00-Z99
对于上述的几种类型还可以有其他的变种形成方式;
如果顺序号码段是3位,全部由0-9的数字形成时,程序实现较简单让它作为数值型数据加1即可获得下一个顺序码。下面对于字符串类型的顺序号全部由字符或字母和数字的形成给出了一种解决方案,这种解决方案也解决了全部由数字形成的顺序号到达最大999时,下一个顺序号不让其变成000的情况;
    在编码器系统的数据库中,形成的编码都会被存储起来,如编码1CB11200A01,后三位是顺序号,他会被存储到数据库表code字段code_h中,
code_h
1CB11200A01

这里讨论的不是编码的存储方法,所以这里就不再深入了。这里想说的是我们可以从数据库表中获得当前类别的最大顺序号A01。下面写了一个函数来实现从A01变到A02,把A01作为参数传入,返回值就是我们需要的A02。
private string getNextString(string source)
        
{
                
char[] temp=source.ToCharArray();
            
                
int h;
            
                h
=1;

                
for(int i=temp.Length-1;i>=0;i--)
                
{
                    
if(!char.IsDigit(temp[i]))
                    

                        
int a;
                        a
=Convert.ToInt16(temp[i]);
                        
if (a==72||a==78||a==89||a==87)
                            a
+=2;
                        
else
                            a
+=h;
                        
if(a>90)
                        
{
                        
                            temp[i]
=Convert.ToChar(65);
                            h
=1;
                        
                        }

                        
else
                        
{
                            temp[i]
=Convert.ToChar(a);
                            h
=0;
                        }

                    }

                    
else  
                    

                        
int a;
                        a
=Convert.ToInt16(temp[i])+h;
                        
if(a>57)
                        
{
                            
if(i!=0)
                                temp[i]
=Convert.ToChar(48);
                            
else
                                temp[i]
=Convert.ToChar(65);
                            h
=1;

                        }

                        
else
                        
{
                            temp[i]
=Convert.ToChar(a);
                            h
=0;
                        }

                     
                    }

                }


                
string w;
                w
="";
                
for(int i=0;i<temp.Length;i++)
                
{

                    w
+=temp[i];
                }


            

                
return  w ;
        }

这个函数对参数的位数,也就是字符串的长度没有限制。
它会生成从A01-Z99的编码,也会获得999的下一个号A00。
这是我进入公司后,为编码系统的完善作了一点贡献。
posted @ 2007-07-07 15:53  易 天  阅读(577)  评论(0编辑  收藏  举报