tm20038175 发表于 2011-3-19 20:43:49

【求助】如何把数字转换成字符

本人制作了个lsp注册程序,原理是读取C盘的硬盘号,赋值给a,假设a=123456,我想把注册码换算成“字符+a/2+字符”,前面字符为前面两位/26对应的字母,后面两位/26对应的字母,然后就把数字a转换成字符串b,这个过程如何实现呀……

Gu_xl 发表于 2011-3-19 21:05:50

回复 tm20038175 的帖子

数字到字符串使用函数:itoa 或rtos
前面两位/26对应的字母可采用如下方法:
(nth(rem num 26)'("A" "B" "C".... 列出26个字母))

tm20038175 发表于 2011-3-19 21:13:54

回复 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,即可注册成功

tm20038175 发表于 2011-3-19 21:10:17

回复 Gu_xl 的帖子

恩,谢谢回复,怎么读取前面两位和后面两位数字Y呀~~~

tm20038175 发表于 2011-3-19 21:26:29

请高手改进下,这个加密方式感觉太简单了

luntan666 发表于 2011-3-20 12:36:33

   学习学习......

daiguafan 发表于 2011-3-22 09:45:18

呵呵,先学习好,然后考虑加密的事情,到时候自然会

Gu_xl 发表于 2011-3-22 12:05:33

7楼说的极是!

MaKaiJin 发表于 2011-5-20 19:36:17

不可以除一小数吗?
页: [1]
查看完整版本: 【求助】如何把数字转换成字符