//想格式化数据为数据加字符的方式,如1 -> 1 ,10->A,同时去除I,O等易混字符,现在的算法在上1000的时候,格式话数据就存在问题,eg:999格式化为ZZ了,1000应该是A00 string strWaterNo = StartValue;
string strWaterNoChr = string.Empty;
int WaterNoCnt = 0;while (WaterNoCnt < Length - TempDocNo.Length)
{
int WaterNoDigit = int.Parse(((int.Parse(strWaterNo) / int.Parse(Math.Pow(32, WaterNoCnt).ToString())) % 32).ToString());//計算公式111/0%32,111/32%32if (WaterNoDigit < 10)
{
// WaterNoChr = "0" + WaterNoDigit.ToString()+ WaterNoDigit.ToString();
string strTemp = "0" + WaterNoDigit.ToString();
strWaterNoChr = Convert.ToString(strTemp).Substring(strTemp.Length - 1, 1) + strWaterNoChr;
}
else
{
int intTempWaterNoDigit = WaterNoDigit + 55;
int intTempWaterCharShift = 0;
if (intTempWaterNoDigit >= 72)//减少判断次数,字母I之前不用判断
{
if (intTempWaterNoDigit + intTempWaterCharShift >= (int)'I')
intTempWaterCharShift = intTempWaterCharShift + 1;if (intTempWaterNoDigit + intTempWaterCharShift >= (int)'O')
intTempWaterCharShift = intTempWaterCharShift + 1;if (intTempWaterNoDigit + intTempWaterCharShift >= (int)'U')
intTempWaterCharShift = intTempWaterCharShift + 1;if (intTempWaterNoDigit + intTempWaterCharShift >= (int)'V')
intTempWaterCharShift = intTempWaterCharShift + 1;
}
strWaterNoChr = Convert.ToString((char)(intTempWaterNoDigit + intTempWaterCharShift)) + strWaterNoChr;
}
WaterNoCnt++;
}

解决方案 »

  1.   

    static char[] IntIndexToLetter(int no)
    {
    List<int> intArray = new List<int>();
    while (no > 0)
    {
    if (no % 34 == 0)
    {
    intArray.Add(34);
    no = (no - 34) / 34;
    }
    else
    {
    intArray.Add(no % 34 + 1);
    no = no / 34;
    }
    }
    intArray.Reverse(); char[] chrArray = new char[intArray.Count];
    for (int i = 0; i < intArray.Count; i++)
    {
    if (intArray[i] <= 10)
    {
    chrArray[i] = (char)(intArray[i] + 47);
    }
    else if (intArray[i] - 10 + 64 < (int)'I')
    {
    chrArray[i] = (char)(intArray[i] - 10 + 64);
    }
    else if (intArray[i] - 10 + 64 < (int)'O')
    {
    chrArray[i] = (char)(intArray[i] - 10 + 64 + 1);
    }
    else
    {
    chrArray[i] = (char)(intArray[i] - 10 + 64 + 2);
    }
    }
    return chrArray;
    }
      

  2.   

    1 -> 1 ,10->A
    那么100,1000呢?
      

  3.   

    晕,我的这个算法也不行因为我之前是进行EXCEL的字母索引转换,所以进制是从1开始.
    你这里是从0开始
      

  4.   

    晕,我的这个算法也不行因为我之前是进行EXCEL的字母索引转换,所以进制是从1开始.
    你这里是从0开始你是怎么转的?说下原理
      

  5.   

    楼主就是三十四进制,其实用我那个改一下就行了,只是我在上班没时间改
    楼主的三十四进制的表示方法为
    0-33对应
    0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z我以前做的特殊一些
    十进制1-26分别对应
    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
    所以我刚开始的时候忘了这个问题,上面写的那个错得很厉害,但是原理是相通的