Board logo

标题: 请教,序列号的计算问题? [打印本页]

作者: donpps     时间: 2006-12-30 07:40    标题: 请教,序列号的计算问题?

问题如下: 输入序列号(仅由数字和大写字母组成的字符串),先判定序列号输入是否正确,如不符要求(仅由数字和大写字母组成的字符串),返回重新输入,如符合要求,则开始计算注册码。取第1个字符的(ASCII编码)前1位的字符(如A为@,9为8),取第2个字符的(ASCII编码)前2位的字符(如A为?,9为7),取第3个字符的(ASCII编码)前4位的字符(如A为=,9为5),取第4个字符的(ASCII编码)前5位的字符(如A为<,9为4),取倒数第4个字符的(ASCII编码)前1位的字符,取倒数第3个字符的(ASCII编码)前2位的字符,取倒数第2个字符的(ASCII编码)前4位的字符,取倒数第1个字符的(ASCII编码)前5位的字符,(中间的几位字符不参与计算),组成一个8(或6,4,2)位字符的注册码。如序列号:W1D0W7M5A0J593459609490 注册号:V/@+825+ 用excel作比较容易。用p处理,不知怎么搞!想用如下文本文件作查询,先以字符查acsi码,再做减法计算,再用计算结果查询字符,可惜写来写去,总写不好。或许用debug的方案还简单些。请教最优解法,谢谢。 + 43 , 44 - 45 . 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 X 88 Y 89 Z 90

作者: electronixtar     时间: 2006-12-30 13:24
p处理也能算sn,顶~

作者: tigerpower     时间: 2006-12-31 12:46
使用 mawk :
C:\>mawk "BEGIN{for(k=43;k<=90;k++){m=sprintf(\"%c\",k);n2i[m]=k};for(i=1;i==1;){printf \"\nPlease enter the SN: \";getline;if(length($0)<8){print \"SN must more than 8 characters\";continue};for(j=1;j<=length($0);j++){if (substr($0,j,1)!~/[0-9A-Z]/){print \"All characters must in [0-9A-Z]!!!\";break}};if (j>length($0)){i=0}};key_gen(0,-1);key_gen(1,-2);key_gen(2,-4);key_gen(3,-5);key_gen(-4,-1);key_gen(-3,-2);key_gen(-2,-4);key_gen(-1,-5);print \"The KEY is: \" key};function key_gen(p,q){key=sprintf(\"%s%c\",key,n2i[substr($0,(p>=0?p+1:length($0)+p+1),1)]+q)}"
更多命令行工具,请到本论坛的 WinPE、PowerShell板块(点击进入)

作者: lxmxn     时间: 2007-5-10 01:34
tigerpower 真乃牛人,Orz

作者: dqls889     时间: 2007-5-17 00:18
一个字,牛人