自动滚码算法设计

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

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值