请问在VFP下... IC卡就麻烦多了,因为每种IC卡的基本原理相同,单具体到接口函数时差别较大,所以需要为每种卡专门做功能函数。另外,IC卡一般都是需要主动读取的,因为他们一般都是通过COM口发送数据的,接触式的一般是主动读取方式,射频卡一般是事件触发(射频卡刷卡事件)。以上只是我知道的,可能还有别的方式我不知道,请专家指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是的,基本上IC卡读写器都有接口函数,关键在于了解他们的读取方法。其实IC卡是次要的,主要的在读写器,一般一个读写器能够读写很多种IC卡,但接口函数是一样的。 给你两个例程,分别是读卡号和减金额的* ** ICReadCardID.PRGDECLARE INTEGER InitPort IN CardReader.DLL INTEGER nPortDECLARE INTEGER ReadCardID IN CardReader.DLLDECLARE INTEGER GetErrorCode IN CardReader.DLLDECLARE INTEGER ClosePort IN CardReader.DLLnCOM_Port = INT(VAL(READICCARDINI("ICCARD.INI", "COM_PORT")))IF NOT BETWEEN(nCOM_Port, 1, 2) nCOM_Port = 1ENDIFWAIT "初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ") ..." WINDOW NOWAITIF InitPort(nCOM_Port) = 0 WAIT CLEAR =MessageBox("初始化 IC 卡串行口(1)错误!", 48, "IC 卡操作失败") RETURN ""ELSE WAIT "读取 IC 卡号 ..." WINDOW NOWAIT nCardID = ReadCardID() IF nCardID > 0 =ClosePort() WAIT CLEAR RETURN ALLTRIM(STR(nCardID)) ENDIFENDIFnError = GetErrorCode()=ClosePort()cErrorMessage = "出现未知错误!"DO CASECASE nError = -1 cErrorMessage = "IC 卡没有插入!"CASE nError = -2 cErrorMessage = "读卡器检测失败!"CASE nError = -3 cErrorMessage = "读数据失败!"CASE nError = -4 cErrorMessage = "此 IC 卡不适合此操作!"CASE nError = -5 cErrorMessage = "IC 卡数据已损坏!"CASE nError = -6 cErrorMessage = "当前的卡不是学生卡!"CASE nError = -7 cErrorMessage = "卡号不正确!"CASE nError = -8 cErrorMessage = "IC 卡密码出错!"CASE nError = -9 cErrorMessage = "写数据过程失败!"CASE nError = -10 cErrorMessage = "没有足够的金额扣除!"CASE nError = -11 cErrorMessage = "参数不正确!"ENDCASEWAIT CLEAR=MessageBox(cErrorMessage, 48, "IC 卡操作失败")CLEAR DLLSRETURN ""* ** ICDecrease.PRGLPARAMETERS cCardNo, nDecreaseMoneyDECLARE INTEGER InitPort IN CardReader.DLL INTEGER nPortDECLARE INTEGER ReadCardID IN CardReader.DLLDECLARE INTEGER GetErrorCode IN CardReader.DLLDECLARE INTEGER ClosePort IN CardReader.DLLDECLARE INTEGER Decrease IN CardReader.DLL INTEGER nCardID, INTEGER nMoney, INTEGER @ Ballance, INTEGER @ SerialID nCOM_Port = INT(VAL(READICCARDINI("ICCARD.INI", "COM_PORT")))IF NOT BETWEEN(nCOM_Port, 1, 2) nCOM_Port = 1ENDIFWAIT "初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ") ..." WINDOW NOWAITIF InitPort(nCOM_Port) = 0 WAIT CLEAR =MessageBox("初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ")错误!", 48, "IC 卡操作失败") RETURN .F.ENDIFnCardID = INT(VAL(cCardNo))nMoney = INT(nDecreaseMoney * 100) && 元转化为分nBallance = 0nSerialID = 0WAIT "扣除罚款金额(" + ALLTRIM(STR(nMoney/100, 10,2)) + ") ... " WINDOW NOWAITnResult = Decrease(nCardID, nMoney, @nBallance, @nSerialID)IF nResult # 0 =ClosePort() IF NOT FILE("ICConsume.DBF") CREATE TABLE ICConsume (卡号 C(14), 扣款金额 N(10,2), 余额 N(10,2), 操作序号 I) ENDIF INSERT INTO ICConsume (卡号, 扣款金额, 余额, 操作序号) VALUES (ALLTRIM(STR(nCardID)), nMoney/100, nBallance/100, nSerialID) =MessageBox("IC卡款额扣除成功!" + CHR(13) + CHR(10) + CHR(13) + CHR(10) + "操作序号:" + ALLTRIM(STR(nSerialID)) + CHR(13) + CHR(10) + "卡上余额:" + ALLTRIM(STR(nBallance/100, 10,2)), 64, "扣除成功") RETURN .T.ENDIFnError = GetErrorCode()=ClosePort()cErrorMessage = "出现未知错误!"DO CASECASE nError = -1 cErrorMessage = "IC 卡没有插入!"CASE nError = -2 cErrorMessage = "读卡器检测失败!"CASE nError = -3 cErrorMessage = "读数据失败!"CASE nError = -4 cErrorMessage = "此 IC 卡不适合此操作!"CASE nError = -5 cErrorMessage = "IC 卡数据已损坏!"CASE nError = -6 cErrorMessage = "当前的卡不是学生卡!"CASE nError = -7 cErrorMessage = "卡号不正确!"CASE nError = -8 cErrorMessage = "IC 卡密码出错!"CASE nError = -9 cErrorMessage = "写数据过程失败!"CASE nError = -10 cErrorMessage = "没有足够的金额扣除!"CASE nError = -11 cErrorMessage = "参数不正确!"ENDCASEWAIT CLEAR=MessageBox(cErrorMessage, 48, "IC 卡操作失败")RETURN .F.* ** ReadICCardINI.PRGLPARAMETERS lIniFile, lcParaStrPRIVATE ALLnFp = FOPEN(lIniFile)IF nFp <= 0 RETURN ""ENDIFlcParaStr = ALLTRIM(UPPER(lcParaStr))cReturn = ""DO WHILE NOT FEOF(nFp) nParaLine = FGETS(nFp) nParaLine1 = CHRTRAN(nParaLine, " ", "") IF UPPER(LEFT(nParaLine1, LEN(lcParaStr) + 1 )) == lcParaStr + "=" cReturn = ALLTRIM(SUBSTR(nParaLine, AT("=", nParaLine) + 1)) EXIT ENDIFENDDO=FCLOSE(nFp)RETURN cReturn* *** ICCard.INICOM_PORT=1PASSWORD = "AAA"XX = Dalian Perfect Foxer兄说得对,扫描条码和用键盘输入是一样的,只不过扫描完后一般条码枪会自动给你加个回车.在程序中处理一下这个回车就可以了.如果条码枪和驱动都正确安装了,程序不需要做其它的改动就可以支持的. to Foxer(狐狸) :实现我的话,请到些帖领分,再次感谢!http://www.csdn.net/expert/topic/1013/1013162.xml?temp=3.820437E-02 那扫描进去后。在VFP中用什么函数来进行处理。谢谢各位! 什么函数都不用,直接输入到TexBox里就行了 再加一句,如果条形码号中都是数字,如果想获得数字的,就给TextBox.Value赋初始值0,如果想获得字符串,就给它赋初始值"" SQL中的方括号怎么用? 头疼啊还是 关于sql server 查询行数的问题 如何利用动态拼接的SQL语句的执行结果 为什么我不能在企业管理器中创建数据库?在线等请各位高手帮忙 ★请问这个sql语句怎么写?》? 在视图中建视图的问题。 请指教:关于sql分组后选符合某条件的某主键列的问题,高手都来看看! 很实用的问题,在网上却找不到解决办法,难道还有更好的方法??? 問題,關于where ? in ? 如何查出某字段重复值的行数? 远程连接Sql server的问题? 汇总问题,请教语句怎么写。谢谢大家
* ** ICReadCardID.PRGDECLARE INTEGER InitPort IN CardReader.DLL INTEGER nPort
DECLARE INTEGER ReadCardID IN CardReader.DLL
DECLARE INTEGER GetErrorCode IN CardReader.DLL
DECLARE INTEGER ClosePort IN CardReader.DLLnCOM_Port = INT(VAL(READICCARDINI("ICCARD.INI", "COM_PORT")))IF NOT BETWEEN(nCOM_Port, 1, 2)
nCOM_Port = 1
ENDIFWAIT "初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ") ..." WINDOW NOWAITIF InitPort(nCOM_Port) = 0
WAIT CLEAR
=MessageBox("初始化 IC 卡串行口(1)错误!", 48, "IC 卡操作失败")
RETURN ""
ELSE
WAIT "读取 IC 卡号 ..." WINDOW NOWAIT
nCardID = ReadCardID()
IF nCardID > 0
=ClosePort()
WAIT CLEAR
RETURN ALLTRIM(STR(nCardID))
ENDIF
ENDIF
nError = GetErrorCode()
=ClosePort()
cErrorMessage = "出现未知错误!"
DO CASE
CASE nError = -1
cErrorMessage = "IC 卡没有插入!"
CASE nError = -2
cErrorMessage = "读卡器检测失败!"
CASE nError = -3
cErrorMessage = "读数据失败!"
CASE nError = -4
cErrorMessage = "此 IC 卡不适合此操作!"
CASE nError = -5
cErrorMessage = "IC 卡数据已损坏!"
CASE nError = -6
cErrorMessage = "当前的卡不是学生卡!"
CASE nError = -7
cErrorMessage = "卡号不正确!"
CASE nError = -8
cErrorMessage = "IC 卡密码出错!"
CASE nError = -9
cErrorMessage = "写数据过程失败!"
CASE nError = -10
cErrorMessage = "没有足够的金额扣除!"
CASE nError = -11
cErrorMessage = "参数不正确!"
ENDCASE
WAIT CLEAR
=MessageBox(cErrorMessage, 48, "IC 卡操作失败")
CLEAR DLLS
RETURN ""
* ** ICDecrease.PRGLPARAMETERS cCardNo, nDecreaseMoney
DECLARE INTEGER InitPort IN CardReader.DLL INTEGER nPort
DECLARE INTEGER ReadCardID IN CardReader.DLL
DECLARE INTEGER GetErrorCode IN CardReader.DLL
DECLARE INTEGER ClosePort IN CardReader.DLL
DECLARE INTEGER Decrease IN CardReader.DLL INTEGER nCardID, INTEGER nMoney, INTEGER @ Ballance, INTEGER @ SerialID nCOM_Port = INT(VAL(READICCARDINI("ICCARD.INI", "COM_PORT")))IF NOT BETWEEN(nCOM_Port, 1, 2)
nCOM_Port = 1
ENDIF
WAIT "初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ") ..." WINDOW NOWAIT
IF InitPort(nCOM_Port) = 0
WAIT CLEAR
=MessageBox("初始化 IC 卡串行口(" + STR(nCOM_Port, 1) + ")错误!", 48, "IC 卡操作失败")
RETURN .F.
ENDIFnCardID = INT(VAL(cCardNo))
nMoney = INT(nDecreaseMoney * 100) && 元转化为分
nBallance = 0
nSerialID = 0WAIT "扣除罚款金额(" + ALLTRIM(STR(nMoney/100, 10,2)) + ") ... " WINDOW NOWAITnResult = Decrease(nCardID, nMoney, @nBallance, @nSerialID)IF nResult # 0
=ClosePort()
IF NOT FILE("ICConsume.DBF")
CREATE TABLE ICConsume (卡号 C(14), 扣款金额 N(10,2), 余额 N(10,2), 操作序号 I)
ENDIF
INSERT INTO ICConsume (卡号, 扣款金额, 余额, 操作序号) VALUES (ALLTRIM(STR(nCardID)), nMoney/100, nBallance/100, nSerialID)
=MessageBox("IC卡款额扣除成功!" + CHR(13) + CHR(10) + CHR(13) + CHR(10) + "操作序号:" + ALLTRIM(STR(nSerialID)) + CHR(13) + CHR(10) + "卡上余额:" + ALLTRIM(STR(nBallance/100, 10,2)), 64, "扣除成功")
RETURN .T.
ENDIF
nError = GetErrorCode()
=ClosePort()
cErrorMessage = "出现未知错误!"
DO CASE
CASE nError = -1
cErrorMessage = "IC 卡没有插入!"
CASE nError = -2
cErrorMessage = "读卡器检测失败!"
CASE nError = -3
cErrorMessage = "读数据失败!"
CASE nError = -4
cErrorMessage = "此 IC 卡不适合此操作!"
CASE nError = -5
cErrorMessage = "IC 卡数据已损坏!"
CASE nError = -6
cErrorMessage = "当前的卡不是学生卡!"
CASE nError = -7
cErrorMessage = "卡号不正确!"
CASE nError = -8
cErrorMessage = "IC 卡密码出错!"
CASE nError = -9
cErrorMessage = "写数据过程失败!"
CASE nError = -10
cErrorMessage = "没有足够的金额扣除!"
CASE nError = -11
cErrorMessage = "参数不正确!"
ENDCASE
WAIT CLEAR
=MessageBox(cErrorMessage, 48, "IC 卡操作失败")
RETURN .F.* ** ReadICCardINI.PRG
LPARAMETERS lIniFile, lcParaStr
PRIVATE ALL
nFp = FOPEN(lIniFile)
IF nFp <= 0
RETURN ""
ENDIF
lcParaStr = ALLTRIM(UPPER(lcParaStr))
cReturn = ""
DO WHILE NOT FEOF(nFp)
nParaLine = FGETS(nFp)
nParaLine1 = CHRTRAN(nParaLine, " ", "")
IF UPPER(LEFT(nParaLine1, LEN(lcParaStr) + 1 )) == lcParaStr + "="
cReturn = ALLTRIM(SUBSTR(nParaLine, AT("=", nParaLine) + 1))
EXIT
ENDIF
ENDDO
=FCLOSE(nFp)
RETURN cReturn
* *** ICCard.INI
COM_PORT=1
PASSWORD = "AAA"
XX = Dalian Perfect