标题 自动滚码算法设计
在半导体行业中,二维码的生成需要保持唯一性,因此需要一个自动滚码算法来生成这个唯一的二维码.
具体规则如下:
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://51itzy.com/kjqy/51523.html