⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 读手机函数.prg

📁 通用题库组卷系统 1.本来是一个学生的本科毕业课题
💻 PRG
字号:
****************************************************
***************************************************   读卡函数
*****************************************************
*读卡函数
&&例如  ok=读磁卡(1,"3",200,10,"请刷要复制的源盘","","")
on key labe "ctrl+f12" do yhxt
clear windows
clear all
close data
clear prog
erase temp\*.*
*erase prog\*.fxp
set defa to d:\yhxt  &&d:\yhxt\prog\prtclass,
set path to d:\yhxt\data\main,d:\yhxt\data\rj,d:\yhxt\data\report,d:\yhxt\data\system;
           ,d:\yhxt\prog,d:\yhxt\prog\myclass,d:\yhxt\prog\prtclass,d:\yhxt\prog\picture,D:\YHXT\prog\picture\打印预览;
           ,d:\yhxt\data\xh
**********************************************
set proc to d:\yhxt\prog\编程工具 addi
*set proc to d:\yhxt\prog\读卡函数 addi
*set proc to d:\yhxt\prog\银行规则 addi
**********************************************
SET BELL OFF
SET CONFIRM ON
SET DELETED ON
SET EXACT ON
Set ansi on
SET EXCLUSIVE OFF
SET NEAR OFF
SET REPROCESS TO 1 SECONDS
set talk off
set esca off
set mess off
set stat bar off
set clock off
set safe off
set dohi off
set comp off
set date ansi
set dele on
SET CENTURY ON
set hour to 24

? 删除短信4()

proc 删除短信4
*para ncom口,c磁道,n值长度,n等待时长,c动作名称,C识别型号,c读卡参数
*C识别型号=""  &&如果屏去此句命令,则将检验机器是否是指定产品
n等待时长=2
ncom口=1
if type("C读卡参数")<>"C" .or. empty(C读卡参数)
  c读卡参数="19200,n,8,1"
&&    c读卡参数="19200,n,8,1"
endif
comm1=createobject("mscommlib.mscomm.1")
comm1.commport=ncom口 &&//指定COM口工作
if comm1.portopen &&=.f.
  messagebox("指定的串口"+allt(str(ncom口))+"正在使用中!",0,"提示")
  return "串口被其它程序占用"
endif
comm1.portopen=.t. &&//打开指定的COM口
*//设置传输速率,奇偶校验,数据位,停止位
comm1.settings=c读卡参数
&&=H_设立等待("正在删除第四条短信")  &&开始读卡
indata1="" &&//变量初始化
comm1.output="AT+CMSS=25"+chr(13)&&"AT+CMSS=14"+chr(13)&&AT+CMGD=4"+chr(13)
lok=.f.  &&判断删除是否执行
for n=1 to n等待时长*2
  ckey=inkey(0.5,'hm')
  if ckey=27 &&ESC
    =H_设立等待("用户终止本次操作,请按任意键返回")
    =inkey(1,'hm')
    exit
  endif
  comm1.inputlen=100 &&n值长度
  indata=comm1.input
  if empty(indata)
    loop
  endif
endfor
=H_消除等待()
return "成功得到:"+indata   &&注意返回值是读卡错误


****************************************************
***************************************************   写卡函数
*****************************************************
*ok=写磁卡(1,"3",200,"123456789877",20,"请刷要制作新存折","","")
proc 写磁卡
para ncom口,c磁道,n值长度,c写入值,n等待时长,c动作名称,C识别型号,c读卡参数
*C识别型号=""  &&如果屏去此句命令,则将检验机器是否是指定产品
if type("C读卡参数")<>"C" .or. empty(C读卡参数)
  c读卡参数="9600,n,8,1"
endif
c磁道标志=""
do case
case c磁道="23" &&要检测是否带A的标志
  *c磁道标志="B"
  if .not. "A" $ c写入值
    =H_设立等待("写入数据没有带'A'标志来所以只写入第二磁道,请按任意键")
    =inkey(1,"hm")
    =H_消除等待()
    c磁道="2"
  endif
case c磁道="3"
  if .not. subst(C写入值,1,1)="A"
    C写入值="A"+c写入值
  endif
case allt(c磁道)="2"
   if "A" $ C写入值
    =H_设立等待("写入数据带'A'标志将自动写入两个磁道,请按任意键")
    =inkey(1,"hm")
    c磁道="23"
    =H_消除等待()
   endif
endcase
comm1=createobject("mscommlib.mscomm.1")
comm1.commport=ncom口 &&//指定COM口工作
if comm1.portopen &&=.f.
  messagebox("指定的串口"+allt(str(ncom口))+"正在使用中!",0,"提示")
  return .f.
endif
comm1.portopen=.t. &&//打开指定的COM口
*//设置传输速率,奇偶校验,数据位,停止位
comm1.settings=c读卡参数
************************************磁卡机校验机型开始
if .not. empty(C识别型号)
  =H_设立等待("正在识别设备型号......")
  comm1.output=CHR(27)+"V"
  for n=1 to 10
    =inkey(0.5,'hm')
    ctemp=comm1.input
    if .not. empty(ctemp)
      exit
    endif
  endfor
  if upper(allt(ctemp)) <> UPPer(allt(C识别型号))
    =H_设立等待("读卡机不是指定设备,请按任意键返回"+ctemp)
    =inkey(0,"hm")
    =H_消除等待()
    return .f.         &&型号不对,强行跳出
   endif
   =H_消除等待()
endif
************************************磁卡机校验机型结束
=H_设立等待(c动作名称)
indata=C写入值 &&//变量初始化
comm1.output=CHR(27)+"t"+indata+CHR(29)+CHR(27)+"\"+CHR(27)+"j"
incheck="没有写卡"
lok=.f.
for n=1 to n等待时长*2
  ckey=inkey(0.5,'hm')
  if ckey=27 &&ESC
    =H_设立等待("用户终止本次操作,请按任意键返回")
    =inkey(1,'hm')
    exit
  endif
  comm1.inputlen=20
  incheck=comm1.input
  if empty(incheck)
    loop
  endif
    do case
    case c磁道="23"  &&最后码是1b"BRP" 或 1b"BRQ"
        if incheck=chr(27)+"B"+"r"+"p" 
               lok=.t.
        else
               lok=.f.
        endif
     case c磁道="3"         &&最后码是1b TRP   或 1b TRQ
         if incheck=chr(27)+"T"+"r"+"p" 
               lok = .t.
         else
              lok=.f.
         endif
     case allt(c磁道)="2"   &&最后码是1b"RP" 或 1b"RQ"
         if incheck=CHR(27)+"r"+"p"
              lok=.t.
         else
              lok=.f.
         endif
     endcase
   exit
endfor
*wait windows "|"+indata+"|"+incheck+"|" nowait
=h_消除等待()
if incheck=="没有写卡"
    =H_设立等待("读卡机没有发现刷卡动作,请按任意键返回")
    =inkey(0,'hm')
    indata="密码失败"
else 
  if lok
    =H_设立等待("写卡成功")
    =inkey(1,'hm')
  else
    =H_设立等待("写卡失败,请按任意键返回")
    =inkey(0,'hm')
  endif
endif
comm1.output=CHR(27)+"0"
=h_消除等待()
return lok  &&.t.表示成功 .f.表示失败

***************************************************************
**************************************************************
**************************************************************
*=读键盘(1,"第一次",6,20,"用户第一次输入口令",)
proc 读键盘
para ncom口,c密码次数,n密码长度,n等待时长,c动作名称,C识别型号,c串口参数
C识别型号=""  &&如果屏去此句命令,则将检验机器是否是指定产品
=H_设立等待(c动作名称)
comm1=createobject("mscommlib.mscomm.1")
comm1.commport=ncom口 &&//指定COM2口工作
comm1.portopen=.t. &&//打开COM2口
*//设置传输速率,奇偶校验,数据位,停止位
comm1.settings="9600,n,8,1"
indata1="" &&//变量初始化
*//从接收缓冲区读出字符串
*comm1.outsettings="9600,n,8,1"
if C密码次数="第一次"
  comm1.output=CHR(27)+"I"  &&第一次输入密码的控制码
else
  comm1.output=CHR(27)+"E"  &&第一次输入密码的控制码
endif
indata="键盘错误"
lok=.f.
for n=1 to n等待时长*2
  ckey=inkey(0.5,'hm')
  if ckey=27 &&ESC
    =H_设立等待("用户终止本次操作,请按任意键返回")
    =inkey(1,'hm')
    exit
  endif
  comm1.inputlen=20
  indata=comm1.input
  if empty(indata)
    loop
   endif
 *messagebox(indata,0,"密码")
   =H_消除等待()
   if len(indata)<> n密码长度+2
     lok=.f.
   =H_消除等待()
      =H_设立等待("密码必须只能"+allt(str(n密码长度))+"位数,请按任意键返回")
      inkey(0,'hm')
      exit
   endif
   indata=allt(subst(indata,2,n密码长度))
   if len(indata)=n密码长度
      =H_设立等待("密码设置成功")
      lok=.t.
      exit
   endif
endfor
if indata="键盘错误"
    =H_设立等待("用户没有输入密码,请按任意键返回")
    =inkey(0,'hm')
    indata="密码失败"
else
  if lok
    =H_设立等待("读键盘密码成功")
    =inkey(1,'hm')
  else
    =H_设立等待("读键盘密码失败,请按任意键返回")
    =inkey(0,'hm')
    indata="密码失败"
  endif
endif
=H_消除等待()
return indata   &&如果返回“密码失败”说明键盘读密码操作失败了

****************************************************
***************************************************   两次读卡
*****************************************************
&&两次较验
proc 两次密码较验
para ncom口,c密码次数,n密码长度,n等待时长,C识别型号,c串口参数
if type("ncom口")<>"N"
  ncom口=1
  n密码长度=6
  n等待时长=20
  C识别型号="RC"
  c串口参数 ="9600,n,8,1"
endif
key1="密码失败"
key1=读键盘(1,"第一次",6,20,"用户第一次输入口令,按ESC退出",)
if key1<>"密码失败"
  key2=读键盘(1,"第二次",6,20,"用户第二次输入口令,按ESC退出",)
  if key1==key2
    =H_设立等待("两次较验密码成功")
     =inkey(1,'hm')
  else
     key1="密码失败"
    =H_设立等待("两次较验密码失败,请按任意键返回")
     =inkey(0,'hm')
  endif
endif
=H_消除等待()
return key1  &&返回"密码失败"


******************************************************
****************************************************** 密码加密
******************************************************


proc h_unlock
para char1,key1              && 接收两个参数: 要解密的字符串,密匙
*********************************从数据库中取密匙
char1=allt(char1)
if type("key1")<>"C"
***************************************
*备份数据库环境
noldsele=str(SELECT())
l开库=.f.
if .not. used("system")
  sele 0
  use system.sys
  l开库=.t.
endif
sele system
key1=system.代码  &&用代码来存key
if l开库=.t.
  use
endif
sele &noldsele.
***********************************
endif
***********************************************
key1=upper(allt(key1))
T_1=len(char1)
T_2=len(key1)
t_4=0
for t_n=1 to t_2                   && 将 密匙 各位ASC码值相加求和 
  t_4=asc(subst(key1,t_n,1))
endfor
t_4=mod(t_4,256)                   && 求和的结果 对256求余 存入t_4
char2=""
for t_n=1 to t_1                   && 每个字节都加上T_4   
  T_5=mod(asc(subst(char1,T_N,1))+256-t_4,256)
  char2=char2+chr(t_5)
endfor
char1=""
for t_n=t_1 to 1 step -1           && 将上述得到的字符串逆序排一次 
  char1=char1+subst(char2,t_n,1)
endfor
char2=""
t_n=1
do while  t_n <= T_1 
   t_m=1
   t_leof=.f.
   do while t_m <= T_2             &&  解密的原理是,字符串按密匙的顺序,逐位+256-密匙对应位的字符
     if t_n+T_M-1 > t_1            &&  得值对 256 求余  将复原为原来的字符串 
       t_leof=.t.
       exit
     endif
     T_3=asc(subst(char1,T_N+T_M-1,1))
     T_3=T_3-asc(subst(key1,T_M,1))
     T_3=mod(T_3+256,256)               &&  避免求余后出现负数的现象
     char2=char2+chr(T_3)
     t_m=t_m+1
   enddo
   if t_leof
     exit
   endif
   t_n=t_N+T_2  
enddo
return char2

proc h_lock
para char1,key1                    && 接收两个参数: 要加密的字符串,密匙
char1=allt(char1)
*********************************从数据库中取密匙
if type("key1")<>"C"
***************************************
*备份数据库环境
noldsele=str(SELECT())
l开库=.f.
if .not. used("system")
  sele 0
  use system.sys
  l开库=.t.
endif
sele system
key1=system.代码  &&用代码来存key
if l开库=.t.
  use
endif
sele &noldsele.
***********************************
endif
***********************************************
key1=upper(allt(key1))
char2=""
T_1=len(char1)                     && 取要加密的字符串的长度  
T_2=len(key1)                      && 取密匙长度 
t_n=1
do while t_n <= T_1
   t_m=1
   t_leof=.f.                      && 设置加密字符串的结束标志  
   do while t_m <= T_2
     if t_n+T_M-1 > t_1            &&  加密的原理是,字符串按密匙的顺序,逐位+密匙对应位的字符
       t_leof=.t.                  &&  得值对 256 求余        
       exit
     endif
     T_3=asc(subst(char1,T_N+T_M-1,1))      
     T_3=T_3+asc(subst(key1,T_M,1))
     T_3=mod(T_3,256)
     char2=char2+chr(T_3)
     t_m=t_m+1
   enddo 
   if t_leof
     exit
   endif
   t_n=t_n+t_2  
enddo
char1=""
for t_n=t_1 to 1 step -1           && 将上述得到的字符串逆序排一次 
  char1=char1+subst(char2,t_n,1)
endfor
t_4=0
for t_n=1 to t_2                   && 将 密匙 各位ASC码值相加求和 
  t_4=asc(subs(key1,t_n,1))
endfor
t_4=mod(t_4,256)                   && 求和的结果 对256求余 存入t_4
char2=""
for t_n=1 to t_1                   && 每个字节都加上T_4   
  T_5=mod(asc(subst(char1,T_N,1)) + t_4,256)
  char2=char2+chr(t_5)
endfor
retu char2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -