//想格式化数据为数据加字符的方式,如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++;
}
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++;
}
{
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;
}
那么100,1000呢?
你这里是从0开始
你这里是从0开始你是怎么转的?说下原理
楼主的三十四进制的表示方法为
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
所以我刚开始的时候忘了这个问题,上面写的那个错得很厉害,但是原理是相通的