自动滚码算法设计

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

	
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在工作和生活中,当您用手机登录网站、邮箱、聊天工具及网络游戏时,是不是偶尔会因为遗忘或记混用户名、密而烦恼呢?当然,通常这些地方都会提供贴心的登录信息记忆功能来方便您的使用,可您有没有想过,万一不慎遗失了手机那捡到它的并怀有恶意的人也会因此而轻松使用本来只属于您的东西呢?另外,不同的地方对用户名和密的长度、组成等一般会有不同的要求,所以需要您编出若干有个性、强度高还得好记的用户名、密并在使用时正确无误的输入它们,怎么样,这活儿想想都头疼了吧?也许您会说编一个稍微简单点儿的在多数地方都能通用的用户名、密不就行了,其实这种做法的风险是最高的,强度的降低会导致更快的被破解,而且只要有一个地方的帐号信息被窃取了那么您其他地方的帐号安全措施也就形同虚设了。 为了彻底解决上述的麻烦,『密管家』诞生了!它主要具有以下几大功能:一是能将您的全部帐号信息分类记录并加密保存,您只需输入自定义的高强度的登录密后即可查看;二是可自动生成任意长度和组成的新密,您再不用浪费脑细胞去编了;三是轻轻摇晃手机便可将指定帐号信息快速输入到任何程序里,用户名、密再长再复杂也不是问题,彻底告别费力的手动输入;四是利用方便的收藏和搜索功能您可在最短的时间内从众多记录中找到需要的那个;五是在简单而灵活的排序功能的帮助下,您可以随意调整列表中记录的顺序;六是通过‘导出和导入’功能可以将全部记录在加密后导出到储存卡或从储存卡中导入您以前备份过的记录;七是特有的定时自动锁功能会在您停止操作一定时间后自动锁定密管家,最大限度保护您的信息安全。 有了『密管家』的协助,任何与密相关的难题都是浮云,一切尽在您的轻松掌握! 【版本】v3.0.0 免费版 【支持终端】Android 1.6及以上 【屏幕适配】320x480,480x800,480x854,720x1280 【软件MD5】25A3526F13A2E25EAADD38223D861ABF 【更新历史】 ----- 2013.09.19 v3.0.0 ----- [除错] 1. 修正了当修改记录时信息输入框的高度显示不统一的问题。 2. 修正了当删除记录时提示框中的文字换行显示异常的问题。 [改进] 1. 重写了界面适配部分的程序逻辑,从而在更多屏幕分辨率和屏幕密度不同的终端上正确显示。 2. 为配合上一步的修改重新设计制作了全部的图片资源。 3. 根据反馈将默认密等新用户找不到的信息调整到了更醒目的位置。 4. 记录列表中的弹出菜单会根据列表中的记录数来变更其显示内容,使菜单操作更加友好。 [新增] 1. 增加对720x1280屏幕分辨率的支持。 2. 软件启动后先显示介绍页面,让新用户对密管家的能力有一个大致的了解。 3. 用户首次进入登录、帮助、关于和记录列表等界面时会弹出操作图示,让新用户不再感到迷茫。 ----- 2012.02.01 v2.5.0 ----- [除错] 1. 修正了在某些HTC手机上出现的使用‘导出和导入’功能时文件列表无法滚动滚动不畅的问题。 2. 修正了在开启了快速输入功能后,利用收藏、搜索功能跳转至其他记录时或者减少以及清空当前记录列表中的记录时会导致输入内容错误甚至程序异常退出的问题。 3. 修正了先清空当前列表中全部记录后再新建记录时新记录无法查看并进而导致程序异常退出的问题。 [改进] 1. 在登录密输入和记录搜索两个界面中自动弹出软键盘以简化操作步骤。 2. 使用导入功能时,增加对备份文件后缀名的判断以更快的校验其合法性,此外将后缀名由.db改为.pdb以更好的区别于其他文件。 3. 对执行删除记录列表中记录的操作时蓝色高亮条的位置变化进行了调整使之更智能更符合操作习惯。 4. 使用导出功能时,输入的登录密和文件密不再明文显示而改为星号显示以加强保密性。 5. 使用更改或找回主密功能时,输入的提示问题答案不再明文显示而改为星号显示以加强保密性。 6. 为更好适应不同的使用需求,将自动锁功能的时间设定上限改为60分钟(初始值改为10分钟),将快速输入功能的开启时限改为2分钟。 [新增] 1. 以手动方式对记录列表中的记录进行排序,所要做的仅仅只是一拖一放这么简单。 ----- 2011.12.08 v2.0.0 ----- [除错] 1. 修正了进入设置、帮助和关于等界面时标题可能会错误显示为‘登录’的问题。 2. 修正了在记录内容查看界面中划屏翻页操作无效的问题。 3. 修正了在密自动生成界面中生成长密时会导致界面显示错乱的问题。 [改进] 1. 对程序图片进行优化以减少安装包大小并提高运行效率,重写帮助文档以更好的阐述应用的特点和功能。 2. 在执行登录或导出导入操作时,密输入框内的密不再明文显示而改为星号显示以加强保密性。 3. 对程序中所有划屏操作的滑动方向进行调整使之符合大多数人的操作习惯,另外让各种弹出菜单在被点选后自动关闭以方便后续新操作的执行。 4. 为配合新增的快速输入功能以及进一步简化用户的操作,在来电或切换到其他程序时密管家不再主动锁定自己。当然这不会降低安全性,因为自动锁功能仍会在预定时间到达后自动锁定密管家。 5. 为配合新增的收藏功能,在每个记录列表中将不再允许有相同名称的记录存在。 6. 为‘导出和导入’功能的储存卡浏览器增加目录的进出位置记忆以极大改善操作体验。 7. 将系统设定中的‘开机显示通知栏图标’改为‘开机启动’和‘显示图标’两个独立选项,增加定制的灵活性。 [新增] 1. 选定一个记录后,只需轻摇手机即可复制用户名或密到剪贴板,再粘贴到其他程序中使用。 2. 记录收藏夹,可将最常用的记录置于其中实现快速访问。 3. 记录搜索,输入部分或全部的记录名称作为关键字即可进行快速查找及访问。 ----- 2011.10.12 v1.5.0 ----- [重要更新] 1. 为导出的备份文件增加了文件密保护,别人即便获得了您的备份文件在不知道密的情况下也无法导入。 [除错] 1. 修正了在任意密分类目录下建立并保存一个用户名和密都为空白的记录会导致下次启动并查看此目录时程序异常退出的问题。 [改进] 1. 对说明文字及程序图片进行一定的润色和调整。 2. 对备份文件的导入功能进行优化,极大的提高了文件合法性校验时的准确性和效率。 3. 为名称过长的记录增加了文字滚动效果,方便用户看清全部内容。 4. 改进了记录列表的翻页方式,将较难的划屏操作改为了屏幕内方向箭头的点击。 5. 为记录列表增加了页显示。 6. 对'自动生成密'页面的布局进行了调整,查看结果预览条时再不用先上下拖动屏幕了。 7. 对自动生成密算法进行了调整,使结果更加准确和合理。 [新增] 1. 开机显示通知栏图标开关,方便用户通过它来快速访问密管家。 ----- 2011.08.26 v1.0.0 ----- 首次发布。 【升级指南】 ----- 2013.09.19 v3.0.0 ----- 1. 旧版用户通过覆盖安装即可升级至最新版。 ----- 2012.02.01 v2.5.0 ----- 1. 旧版用户通过覆盖安装即可升级至最新版,由于v2.5.0的备份文件名有所变化,所以请将之前导出的备份文件名里的.db改为.pdb。 ----- 2011.12.08 v2.0.0 ----- 1. 由于v2.0.0新增了密收藏功能并禁止了记录列表里存在同名记录,使数据库结构有稍许变化,只是覆盖升级的话会造成新版运行出现异常,所以强烈建议旧版用户在升级时采用全新安装的方式,提供步骤如下:首先确保密管家内的记录是最新、最完整的(如不是请从您的备份文件导入),然后请将每个记录列表内存在的同名记录改名区分(没有则跳过此步),接着执行一次导出操作,最后卸载并重新安装密管家再将上一步导出的记录导入即可。新用户不用遵循上述操作,直接安装v2.0.0即可。 ----- 2011.10.12 v1.5.0 ----- 1. v1.5.0包含一个重要更新和严重Bug的修正,强烈建议在使用v1.0.0的机友升级。由于备份文件增加了密校验功能导致新版密管家不能导入旧版的备份文件,所以请您按照如下步骤升级:首先确保v1.0.0密管家内的记录是最新、最完整的(如不是请从您的旧版备份文件导入),然后不要卸载v1.0.0而是直接覆盖安装v1.5.0,完成后再执行一次导出操作并保存好备份文件即可。新用户不用遵循上述操作,直接安装v1.5.0即可。 2. 从v1.5.0开始将不再支持Android 1.5版的手机,因为后续要实现的功能必须Android 1.6以上才行,所以还望在用Android 1.5版手机的机友见谅。 【疑问解答】 1. 为什么会访问网络,会不会偷偷上传用户的账户记录信息? 会访问网络是由于嵌入了第三方的广告SDK,密管家自身是不会有联网操作的。至于会不会偷偷上传用户的账户记录,我们郑重声明绝对不会,而且将来也不打算开发云储存这类的功能,因为信息只有保存在本地保存在自己手里才是相对最安全的。另外嵌入的广告SDK也不可能访问到密管家的内部加密数据。当然,说到底最终的选择权还是在用户手中,时间会证明一切的。 2. 安装时为什么显示要使用很多的权限? 实际上密管家自身只请求了两个权限,开机启动权限(开机时自动运行)和存储卡读写权限(导出和导入),别的权限皆为嵌入的广告SDK所要求使用的。 【特别建议】 1. 无论是新用户还是老用户,请务必在成功安装了新版的密管家后花上2,3分钟时间查看软件帮助,全面了解一下软件的功能和操作方法,这样有利于您在更短的时间内熟练掌握密管家的全部本领。 2. 遇到软件使用方面的困难时,请您先查看软件帮助中有没有相应的提示,如果仍不能解决的话请按照软件关于中的联系方式联络我们,我们会在第一时间给予您协助。 【付费版本】 在试用过免费版后,如果您觉得密管家还不错,想继续使用并获得更好的用户体验,不妨尝试选择付费版。相较于免费版,付费版有如下优势: 1. 清爽的界面没有任何广告,不再消耗您宝贵的网络流量,您也不用再担心账户信息会不会被偷偷上传了。 2. 一目了然的安全保证,安装软件时不再请求一些敏感功能的权限,您也不用再担心个人隐私信息被泄露了。 3. 毫无疑问的更加节省电力。 有意购买的话请按照软件关于中的联系方式联络我们^^
1.基本要求 能够实现如下功能: ‹ 首先用蓝色清屏 ‹ 在屏幕中央显示由字符串“-============#”组成的黄色的小球,#为球, 按下方向键可以控制上述小球球行方式在屏幕上行走 ‹ 在行进过程中,球只能左转、右转或继续前进,不能掉转 180 度 2.鼓励实现完整的彩球滚动游戏,鼓励有新的创意 3.提示 ①通过调用 INT 16H 的 0 号功能可以读取光标控制键的扩展 光标控制键: ↑ ↓ ← → 扩展(十进制): 72 80 75 77 ②在指定位置用指定属性显示字符的方法有两种:一是直接写显示缓冲区,二是利用 BIOS 屏显功能调用。解: 功能描述(基本上是全部功能):本程序有以下功能 共分为7关,可以手工选择关卡(带有输入异常处理)。走完一关后,如果后面还有关, 直接跳到下一关。否则,结束游戏。各个关之间的差别是速度不同。 按下方向键,球能够按照题的要求在屏幕上行走。按下 ESC 键,退出游戏,按下其他键, 程序不理会。 长时间不按键,球会自动前进。 能够产生随机数,作为蛋。球的初始大小为 14,当大小为 20 时,此关结束。 如果球运动到了边界,球死亡。游戏结束。 ① 设计思路 程序开始时,由用户指定一个关卡,进入游戏。 每次用清屏加显示字符的方式重新显示球和蛋。 当检测到有键子按下时,判断是什么键子,如果是 esc,退出游戏,如果是方向键,按 正确的方向走(如果方向键与球运动方向相反,不理会按键),如果按下的时其它键, 不理会。 设置一个等待时间,如果超过等待时间仍没有按键,球自动前行一步。否则,重新比较 时间。 每次球运动或有键子被按下时,判断是否撞到了自身和边界。 如果吃到了一个蛋,更新完球的位置后,将原球的位置加入球中。 如果球的长度达到了 20(设置的球的最大大小),判断后面是否还有关,没有了,就结 束程序,还有,就跳到下一关卡。 ② 算法说明 设置两个标记变量,分别记录球的大小 ssize 和球上次的大小 befor。设置标记变量, 分别记录蛋的横纵座标 xlabel 和 ylabel,设置标记变量,记录球的位置 tailx 和 taily。设置 snake 记录球各个部分的位置,设置球的最大大小为 20。设置变量 TIME 为等待按键时间。 关卡的选择:程序开始时,从键盘读入一个数字,当作关卡,根据读入的数据,设置等 待时间,也就实现了对球的速度的控制。 清屏和显示小球和蛋。调用 bios 中断可以实现。每次输出 1 个球,下面说一下如何实现小球的手工移动(有按键输入时)。可以知道,如果把球看成一个 个单元,球每移动一次,它的身体的位置都等于它的前一个身体单元的上一步 的位置,因此,可以从尾部进行循环,把前一节的位置给后一节。这样循环 ssize-1 次 就更新了身体,再根据输入的按键判断如何如移动头部,如果按键是左或者右, 只需将球的列加减 1,如果按键是上或者下,只需将球的行加减 1。至此,完成了 对球的显示位置的更新,之后重新清屏、显示,可以使球移动了。 在判断球是否向相反方向走时,可以采用如下算法:已知按键了(以向上为例),检查 球和身体第一节的行号,如果球行号大,说明此时设在向下运动,按键无效。 判断球撞到边界的算法如下(以向上键为例):判断球此时的行号是否为 0,如果是 0, 又按下了向上键,结束游戏,输出“I AM DEAD!!!”。如果球运动过程中撞到了自己, 也同撞到边界的操作。算法是这样的:取出球的位置,依次和每个身体和尾巴的位置 进行比较(从球开始比较),如果相等,说明撞上了,结束游戏。 如何实现球的自动移动。可以用 INT 10H 的 1 号功能检测是否有按键输入,如果有,转 到手工移动模块,否则,调用 INT 1AH 中的 00 号功能,读取当前时间。与上次读的时 间相比,如果小于设定的时间,重新比较,否则,球自动前移。实现前移的算法与手工 移动相似,也是将身体的某一单元的位置置成塔前一单元上一次的位置,之后判断球 方向。 产生并输出蛋。相当于产生一个随机数,我已经读去了当前时间,可以利用 DX 移位(防 止溢出)以后,对 80 和 25 取余,获得位置的随机数。之后判断球的大小 ssize 和 befor, 先让 ssize 为 14,befor 为 13,每产生一个随机数,befor 加 1,每吃一个蛋,ssize 加 1。比较 ssize 和 befor,如果相等,证明球没有吃蛋,不用产生新的随机数,仍在 原位置输出随机数,否则,产生新的随机数。球的大小的变化。每次吃到一个蛋后,ssize加1,并且将更新前球的位置加入到snake, 这样下次输出就能够多输出一个球,实现了大小的增加。 关卡的切换:每当球吃了一个蛋以后,判断是否达到了球的最大大小20,如果达到了, 继续判断是否的达到了等待时间的最小值(也就是最高的一关),如果没有达到,就更 新等待时间,进入下一关卡之前,还要将球的大小 ssize 和初始大小befor 分别设为 14 和 13。将记录球位置的内存 snake 的前 14 个字更新到屏幕中央。之后,就可以进入下 一关了。如果已经达到了最高关,并且通过了,就结束程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值