2017-07-27 80 views
0

我写下面的代码来生成我的8位数字符号,增量应该从左到右发生。如何在c中生成字母数字序列号

想我开始编号ABC00001下一个增量数量将ABC00002

数量将增加多达9,9后,将变成。 如:ABC00009 - > ABC00000A - > ABC00000B - > ... - > ABC00000Z

Z后,将倒数第二位数目变化为ABC0000A1 - > ABC0000A2 ...

public static string GeneratedNextevcPrimakryKey() 
     { 
      System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
      string str = string.Empty; 

      var maxNumber = "ONC0BJKZ"; 

      string splitnumber = maxNumber.Substring(3, 5); 
      char[] temp = splitnumber.ToCharArray(); 
      //find last index number/character 
      for (int i = splitnumber.Length - 1; i >= 0; i--) 
      { 
       if (char.IsNumber(splitnumber[i])) 
       { 
        int fifthvalue = Convert.ToInt32(splitnumber[i].ToString()); 

        //increment 5th digit character 
        if (fifthvalue == 9) 
        { 
         temp[i] = 'A'; 
         break; 
        } 
        else 
        { 
         fifthvalue = fifthvalue + 1; 
         string f = Convert.ToString(fifthvalue); 
         temp[i] = Convert.ToChar(f); 
         //sb.Append(fifthvalue); 
         break; 
        } 
       } 
       else 
       { 
        char letter = splitnumber[i]; 
        char nextChar = new char(); 
        if (letter == 'z') 
        { 
         string strvalue = Convert.ToString(1); 
         temp[i] = Convert.ToChar(strvalue); 
        } 
        else if (letter == 'Z') 
        { 
         //last digit character 
         string strvalue = Convert.ToString(1); 
         temp[i] = Convert.ToChar(strvalue); 
         str = new string(temp); 

         break; 
        } 
        else 

         nextChar = (char)(((int)letter) + 1); 

        temp[i] = nextChar; 
        str = new string(temp); 
        break; 
       } 


      } 
      return str; 
     } 
+3

也许谁upvoted可以[编辑]一问到这个? – Will

+0

这里有什么问题吗?您是否遇到错误或意外结果?您是否在寻求有关如何使其更好/更快的反馈? –

+0

是的,我的输出没有正确生成。 –

回答

0

你可以尝试实施Base36

void Main() 
{ 
    // 17 would be the number you want to convert to your ABC format 
    var result = ToBase36(17); 
    Console.WriteLine(result); 
    // Will print "ABC00000H" 
} 

private static string ToBase36(ulong value) 
{ 
    const string base36 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    var sb = new StringBuilder(9); 
    do 
    { 
     sb.Insert(0, base36[(byte)(value % 36)]); 
     value /= 36; 
    } while (value != 0); 

    var paddedString = "ABC" + sb.ToString().PadLeft(6, '0'); 
    return paddedString; 
}