我们要求将我们的序列号设为 Base 36 (0-9,AZ)。我最初的想法是以十进制存储计数器,仅在需要显示时转换为十六进制。这使得计数变得简单,但是还有另一个要求是不要使用 I 或 O,因为它会与条形码人类可读部分上的 1 和 0 混淆。这使它有点像噩梦。
语言并不重要,但计数器本身将保存在 SQL Server 2012+ 中。
任何人都有这个问题的经验?
编辑:我重写了一个我发现在 C# 中测试的方法。它允许传入任何基本字符字符串。即。字符串 baseChars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; 它不漂亮,但它是一个开始!
private string GetCustomBase(int iValue, string baseChars)
{
int baseNum = baseChars.Length;
int value= iValue;
string result = "";
while( value > 0 )
{
result = baseChars[ 0 + (value % baseNum)] + result;
value = value / baseNum;
}
return result;
}
private int GetDecimal(string strValue, string baseChars)
{
int baseNum = baseChars.Length;
string strAmendedValue = strValue;
int iResult = 0;
//Each char one at a time (from right)
for (int i = 0; i < strValue.Length; i++)
{
string c = strValue.Substring(strValue.Length - i -1, 1);
int iPos = baseChars.IndexOf(c); //get actual value (0 = 0, A = 10 etc.)
int iPowerVal = (int)Math.Pow((double)baseNum, (double)(i));
iResult = iResult + (iPowerVal * iPos);
}
return iResult;
}