2017-07-27 173 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; 
}