##标题 自动滚码算法设计##
在半导体行业中,二维码的生成需要保持唯一性,因此需要一个自动滚码算法来生成这个唯一的二维码.
具体规则如下:
1.自定义滚码字符,一般是0-9数字+A-Z字母组成,去掉一些容易引起误解的字符如I,B,O,V等,组成一组滚码原始字符.
2.根据不同客户需求设置二位码长度,通常7位二维码就可以生成42,618,442,977个二维码(按照33个字符计算)
3.滚码规则,个位数达到最大码,十位加一,十位达到最大值,百位加一,以此类推.
例如数据结构定义以及循环字符定义如下:
#define MAXCODE 32
const char ASILL[MAXCODE]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,
‘A’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’,‘J’,‘K’,‘L’,
‘M’,‘N’,‘P’,‘Q’,‘R’,‘S’,‘T’,‘U’,‘V’,‘W’,
‘X’,‘Y’};
typedef struct _DataInfor
{
int i1;//个位
int i2;//十位
int i3;//百位
int i4;//千位
int i5;//万位
int i6;//十万位
int i7;//百万位
BOOL bUpdate[6];
int codeLength;
CString strCode;
_DataInfor()
{
i1=0;
i2=0;
i3=0;
i4=0;
i5=0;
i6=0;
i7=0;
strCode=_T("A000350");
codeLength=7;
for (int i=0;i<=6;i++)
{
bUpdate[i]=FALSE;
}
}
}DataInfor;
有了以上内容,数据结构,我们就可以设计算法实现这个功能啦:
CString AutoMatrix(CString strStart)
{
do
{
strTemp1=strStart.Mid(6,1);
strTemp2=strStart.Mid(5,1);
strTemp3=strStart.Mid(4,1);
strTemp4=strStart.Mid(3,1);
strTemp5=strStart.Mid(2,1);
strTemp6=strStart.Mid(1,1);
strTemp7=strStart.Mid(0,1);
i1++;
if (ASILL[MAXCODE-1]==strTemp1)
{
bUpdate[0]=TRUE;
for (int n=0;n<MAXCODE-1;n++)
{
if (strTemp2==ASILL[n])
{
i2=n;
break;
}
}
i2++;
i1=0;
//break;
}
if (ASILL[MAXCODE-1]== strTemp2)
{
if (strTemp1==ASILL[MAXCODE-1])
{
bUpdate[1]=TRUE;
for (int n=0;n<MAXCODE-1;n++)
{
if (strTemp3==ASILL[n])
{
i3=n;
break;
}
}
i1=0;
i2=0;
i3++;
}
//break;
}
......以此类推
//更新最后生成的二维码信息并返回,写入文件数据结构
strStart=_T("");
strStart+=strTemp7;
strStart+=strTemp6;
strStart+=strTemp5;
strStart+=strTemp4;
strStart+=strTemp3;
strStart+=strTemp2;
strStart+=strTemp1;
break;
} while (TRUE);
return strStart;//返回计算的生产码,便于下一次继续增加
}
.
我们的数据结构,最后用于,保存数据记录7位数字当前状态,当前值,,关闭退出软件,需要重新加载数据结构,保证数据的唯一性,不重复.
![测试效果](https://img-blog.csdnimg.cn/direct/c2d938abef8b499e80286ee41d9ee3b4.png)