【求助】如何把数字转换成字符
本人制作了个lsp注册程序,原理是读取C盘的硬盘号,赋值给a,假设a=123456,我想把注册码换算成“字符+a/2+字符”,前面字符为前面两位/26对应的字母,后面两位/26对应的字母,然后就把数字a转换成字符串b,这个过程如何实现呀…… 回复 tm20038175 的帖子数字到字符串使用函数:itoa 或rtos
前面两位/26对应的字母可采用如下方法:
(nth(rem num 26)'("A" "B" "C".... 列出26个字母)) 回复 Gu_xl 的帖子
源代码是在明经找到的,除以3得到注册码,如下,怎么改成有字符串的呢,求指点,谢谢……
(defun UseLimit (/ FIND_SERIALNUMBER regNumber num regnum reg_path *error*)
(defun *error* (msg / ent count)
(princ)
)
(defun FIND_SERIALNUMBER (DRIVE / FILSYS VAL)
(setq FILSYS (vlax-create-object "Scripting.FileSystemObject"))
;;(vlax-dump-object FILSYS t)
(setq VAL (vlax-invoke FILSYS "GetDrive" DRIVE))
;;(vlax-dump-object VAL t)
(setq VAL (vl-catch-all-apply
'vlax-get
(list VAL "SerialNumber")
)
)
(vlax-release-object FILSYS)
(if (vl-catch-all-error-p VAL)
(setq VAL NIL)
VAL
)
)
(setq reg_path "HKEY_CURRENT_USER\\Software\\VB and VBA Program Settings\\temp")
(setq regNumber (vl-registry-read reg_path "注册码"))
(if (/= regNumber
(itoa
(/ (atoi (rtos (atoi (rtos (FIND_SERIALNUMBER "C:"))))) 3);;;注册码=申请码/2
)
)
(progn
(alert
(strcat
"请注册!")
)
(setq num (rtos (FIND_SERIALNUMBER "C:")))
(setq regnum (itoa (/ (atoi (rtos (atoi num))) 3)));;;注册码=申请码/2
(textscr)
(princ
(strcat "您的申请码为: " num)
)
(setq regNumber (getstring "\n请输入注册码:"))
(if (/= regNumber regnum)
(progn
(alert "注册码无效!")
(exit)
)
(progn
(vl-registry-write reg_path "注册码" regnum)
(alert "您已成功注册!")
)
)
T
)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;(vl-load-com)
;;;(vl-load-all "Register")
;;;(UseLimit)
;;;请在任何LSP文件中加入以上三行即可,注意一定要放在最前面!!!
;;;只支持AutoCAD2000及以上的版本
;;;Register.fas文件必须放在AutoCAD的支持路径下
;;;如Register.fas文件不在AutoCAD支持路径,请自行指定路径
;;;如(vl-load-all "C:/Program Files/AutoCAD 2004/Support/Register")
;;;现在的加密方式为
;;;获取物理磁盘C的序列号进行除2取整运算
;;;所以注册码=取整(申请码/2)
;;;如申请码为1550011861,则注册码=1550011861/2=775005930.5,去掉小数
;;;注册码则为775005930,即可注册成功 回复 Gu_xl 的帖子
恩,谢谢回复,怎么读取前面两位和后面两位数字Y呀~~~ 请高手改进下,这个加密方式感觉太简单了 学习学习...... 呵呵,先学习好,然后考虑加密的事情,到时候自然会 7楼说的极是! 不可以除一小数吗?
页:
[1]