本帖最后由 作者 于 2007-9-8 10:11:58 编辑
上网查了一下相关的资料,大多序列号是取硬盘网卡序列号之类,实际使用发现有很多问题,主要是取硬盘或网卡序列号经常有问题,再说用vlax-create...函数要类型库支持,特写了这个函数 ;;;用计算机名和用户名产生序列号 ;;;参数username为用户名 ,computername为计算机名,参数bstr为加密字串 ;;;师兄 QQ361865648 2007/9/8 (defun getkey(username computername bstr / usname cname) (setq usname username cname computername) (if (not usname)(setq usname(getenv "UserName"))) (if (not cname)(setq cname (getenv "ComputerName") )) (setq keyn(strcat(vl-string-trim " " (substr usname 1 2)) (vl-string-trim " " (substr cname 1 2)))) (setq addlst '("B" "C" "D" "F" "G")) (setq i 0) (while (< (strlen keyn) 4) (setq keyn(strcat keyn (nth i addlst))) (setq i(1+ i))) (setq tosumlst(VL-STRING->LIST keyn)) (setq sellst(mapcar '(lambda (x / tmpstr) (setq tmpstr(rtos x 2 0)) (substr tmpstr 2 1)) tosumlst)) (setq basstr bstr) (if (not bstr) (setq basstr "B2CDF5G3HJ4K6MPQ7RT9VWX8YKF6J8CD4G3")) (setq i 1) (setq key(mapcar '(lambda (x / num) (setq num(fix(* 3 (atof x)))) (substr basstr (1+ num) 4)) sellst)) ) ;;;测试 (getkey nil nil nil);_按默认方式计算序列号 返回 ("DF5G" "DF5G" "B2CD" "WX8Y") 具体算法就不多说了,自已研究去吧,这个序列号太长了,改一改程序可得到你想要的序列 |