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
一个字,牛人