📄 mdldefine.bas
字号:
Attribute VB_Name = "mdlDef"
Option Explicit
'---------------------------------------------------------------------------
' 常量定义
'---------------------------------------------------------------------------
Public Const HDA_REQMESSAGEOFBACKGROUND = 1 '// 后台请求报文
Public Const HDA_REQMESSAGEOFTERMINAL = 0 '// 终端请求报文
Public Const HDA_BROADCASTSN = 0 '// 广播序列号
Public Const HDA_BROADCASTTERMINALID = 0 '// 广播终端号
Public Const HDA_BROADCASTADDRESSOFALL = &HFFFF '// CAN全网广播地址
Public Const HDA_BROADCASTADDRESSOFONE = &HFF '// CAN广播地址
Public Const HDA_SYSTEMIDOFATT1_1 = &H400 '// CAN1.1考勤系统子系统号
Public Const HDA_SYSTEMIDOFACC1_1 = &H500 '// CAN1.1门禁系统子系统号
Public Const HDA_SYSTEMIDOFPOS1_1 = &H600 '// CAN1.1收费系统子系统号
'---------------------------------------------------------------------------
' 枚举类型
'---------------------------------------------------------------------------
'汉字内码
Public Enum CHINESETYPE
GB_GB = 0 ' 后台-GB / 终端-GB
GB_BIG5 = 1 ' 后台-GB / 终端-BIG5
BIG5_GB = 2 ' 后台-BIG5 / 终端-GB
BIG5_BIG5 = 3 ' 后台-BIG5 / 终端-BIG5
End Enum
'通讯方式
Public Enum COMMTYPE
COMMTYPE_CAN1_0 = 0 'CAN 1.0(地址1B)
COMMTYPE_CAN1_1 = 1 'CAN 1.1(地址2B)
COMMTYPE_CAN2_0 = 2 'CAN 2.0(地址2B)
COMMTYPE_RS232 = 3 'RS232
COMMTYPE_TCP_IP = 4 'TCP/IP
End Enum
'信息码(为偶数的值表示报文发起方为终端一方,为奇数表示报文发起方为后台一方)
Public Enum MessageType
MT_ONLINENOTICE1 = &H26 '终端在线通知
MT_ONLINENOTICE2 = &H27 '
MT_REECHO1 = &H28 '回响测试
MT_REECHO2 = &H29 '
MT_ALLOTADDRESS1 = &H6 '分配地址
MT_ALLOTADDRESS2 = &H7
MT_CONFIGPARA1 = &H22 '配置参数
MT_CONFIGPARA2 = &H23
MT_INITPARA1 = &H0 '初始化参数
MT_INITPARA2 = &H1
MT_SIGNIN1 = &H20 ' // 签到
MT_SETUSERDEFNUMBER2 = &HD ' 设置用户自定义编号
MT_SENDATTENDEVENT1 = &H94 ' 上送考勤事件
MT_UPDATELIST1 = &H2A ' 更新黑名单
MT_UPDATELIST2 = &H2B
MT_UPDATEIDLIST2 = &H3B '更新ID黑名单
MT_UPDATEIDWCLIST2 = &H3D '更新ID白名单
MT_BATCHSENDRECORD2 = &H31 ' 采集脱机记录
MT_DELETERECORD2 = &H33 ' 删除当次采集记录
MT_QUERY1 = &H50 '查询
MT_TRADE1 = &H60 ' 消费
End Enum
'报文响应码
Public Enum RESPONSECODE
RC_SUCCESS = 0 ' // 批准或成功地完成
RC_ENQUIRECENTER = 1 ' // 请查询管理中心
RC_ADDRESSCONFLICT = 2 ' // 地址冲突
RC_INVALIDMERCHANT = 3 ' // 无效商户
RC_SEIZURECARD = 4 ' // 没收卡
RC_TERMINALSTATEERROR = 5 ' // 终端状态错误
RC_INVALIDMESSAGE = 12 ' // 无效报文
RC_INVALIDAMOUNT = 13 ' // 无效金额
RC_INVALIDCARDNO = 14 ' // 无效卡号
RC_INVALIDOPRCARDNO = 15 ' // 无效操作员卡号
RC_NOORIGINALTRANS = 25 ' // 未能找到原交易
RC_DATAGRAMERROR = 30 ' // 报文错
RC_MACERROR = 31 ' // 产生MAC错
RC_PINFORMATERROR = 32 ' // PIN格式错
RC_CONFIOVERDUECARD = 33 ' // 过期的卡-没收
RC_CONFIPINWRONGOVERTIMES = 38 ' // 超过允许的PIN试输入-没收
RC_LISTVERSIONERROR = 39 ' // 黑名单版本错误
RC_CONFIREPORTLOSSCARD = 41 ' // 挂失卡-没收
RC_CONFIBESTOLENCARD = 43 ' // 被窃卡-没收
RC_TARIFFVERSIONERROR = 44 ' // 价目表版本错误
RC_NOTSUFFICIENT = 51 ' // 无足够的存款
RC_OVERDUECARD = 54 ' // 过期的卡
RC_PINWRONG = 55 ' // 不正确的PIN
RC_UNALLOWEDTRANSFORCARDHOLDER = 57 ' // 不允许持卡人进行的交易
RC_UNALLOWEDTRANSFORTERMINAL = 58 ' // 不允许终端进行的交易
RC_ORIGINALAMOUNTWRONG = 64 ' // 原始金额不正确
RC_GETCASHOVERTIMES = 65 ' // 超出取款次数限制
RC_PINWRONGOVERTIMES = 75 ' // 允许的输入PIN次数超限
RC_BALANCEWRONG = 77 ' // 结算不平
RC_VOUCHERIDWRONG = 78 ' // 凭证号错误
RC_BATCHIDWRONG = 80 ' // 批号错误
RC_ORIGINALTRANSBECHANGED = 86 ' // 原交易已改变
RC_NOANSWER = 87 ' // 收不到发卡方的应答
RC_INVALIDTERMINAL = 89 ' // 无效终端
RC_INDATESWITCHING = 90 ' // 日期切换正在处理
RC_TRANSUNALLOWEDTEMP = 91 ' // 发卡方或POS中心不能操作
RC_TRANSREPEATED = 94 ' // 交易重复
RC_BALANCEWRONGANDBATCHSEND = 95 ' // 结算不平,要求批上送
RC_SYSTEMDISABLED = 96 ' // 系统异常、失效
End Enum
'---------------------------------------------------------------------------
' 结构
'---------------------------------------------------------------------------
Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
'日期时间结构
Type MYDATETIMESTRUCT
Year As Byte ' // 年
Month As Byte ' // 月
Day As Byte ' // 日
Hour As Byte ' // 时
Minute As Byte ' // 分
Second As Byte ' // 秒
DayOfWeek As Byte ' // 周
End Type
'按结构方式调用报文结构
Type HD8583STRUCT
Message_Type As Byte ' // 信息码(报文类型)
Response_Code As Byte ' // 响应码
TERMINALTYPE As Byte ' // 终端类型
WorkMode As Byte ' // 终端工作模式
IndexOfEW As Byte ' // 电子钱包索引号
DateTime As MYDATETIMESTRUCT ' // 日期和时间
CardNumber As Long ' // 卡号
Amount As Long ' // 交易金额
AdditionalAmount As Long ' // 附加金额
AdditionalAmount2 As Long ' // 附加金额2
TraceOfPOS As Long ' // POS流水号
OrgTransTrace As Long ' // 原交易POS流水号
OperatorID As Long ' // 操作员号
TerminalSN As Long ' // 终端序列号
VerOfList As Long ' // 黑名单版本
TraceOfEW As Integer ' // 电子钱包流水号
TerminalID As Integer ' // 终端号
MerchantID As Integer ' // 商户号
Address As Integer ' // 终端地址
LenOfAdditionalData1 As Integer ' // 附加数据1长度
AdditionalData1(0 To 2499) As Byte ' // 附加数据1
LenOfAdditionalData2 As Integer ' // 附加数据2长度
AdditionalData2(0 To 2499) As Byte ' // 附加数据2
LenOfAdditionalData3 As Integer ' // 附加数据3长度
AdditionalData3 As String * 2500 ' // 附加数据3
'AdditionalData3(0 To 2499) As Byte
LenOfAdditionalData4 As Integer ' // 附加数据4长度
AdditionalData4 As String * 2500 ' // 附加数据4
'AdditionalData4 As Byte
PIN(0 To 7) As Byte ' // 个人识别码
WorkKey(0 To 7) As Byte ' // 工作密钥
End Type
'Buffer结构
Type BUFFERSTRUCT
Buffer(0 To 4095) As Byte ' // 4k Bytes
End Type
Type ORGTRADERECORDSTRUCT ' 原始交易数据结构
Data(47) As Byte
End Type
Type ORGATTENDRECORDSTRUCT ' 原始考勤数据结构
Data(14) As Byte
End Type
Type ORGACCESSRECORDSTRUCT ' 原始门禁数据结构
Data(18) As Byte
End Type
Public Enum TERMINALTYPE
TERMINALTYPE_READER = 0 '读写器终端
TERMINALTYPE_POS = 1 '消费终端
TERMINALTYPE_ATTEND = 2 ' 考勤终端
TERMINALTYPE_ACCESS = 3 '门禁终端
TERMINALTYPE_IDREADER = &H40 ' // ID卡读写器终端
TERMINALTYPE_IDPOS = &H41 ' // ID卡消费终端
TERMINALTYPE_IDATTEND = &H42 ' // ID卡考勤终端
TERMINALTYPE_IDGCU = &H43 ' // ID卡GCU
End Enum
Type TRADERECORDSTRUCT ' 交易记录数据结构
CardNumber As Long ' // 卡号
Balance As Long ' ; // 卡余额
Amount As Long ' ; // 交易金额
Year As Long ' // 交易日期
Month As Long ';
Day As Long ';
Hour As Long '; // 交易时间
Minute As Long ' ;
Second As Long ' ;
TraceOfEW As Long ' ; // 钱包流水号
TraceOfPOS As Long ' ; // POS流水号
OrgTransTrace As Long '; // 原交易POS流水号
OperatorID As Long '; // 操作员号
PreTerminalSN As Long '; // 前笔交易终端序列号
TerminalID As Long '; // 交易终端号
GoodsNumber As Long '; // 商品编号
IndexOfEW As Long '; // 钱包索引号
RecordType As Long '; // 消费记录类型
ConsumeMode As Long '; // 消费模式
MAC(4) As Byte ' ; // MAC
End Type
Type ATTENDRECORDSTRUCT ' 考勤记录数据结构
CardNumber As Long '; // 卡号
Year As Long '; // 日期
Month As Long ';
Day As Long ';
Hour As Long '; // 时间
Minute As Long ';
Second As Long ';
TerminalID As Long '; // 终端号
ReaderID As Long '; // 读头号
RecordType As Long '; // 记录类型
End Type
Type ACCESSRECORDSTRUCT ' 门禁记录数据结构
CardNumber As Long ' ; // 卡号
Year As Long ' ; // 日期
Month As Long ' ;
Day As Long ' ;
Hour As Long ' ; // 时间
Minute As Long ' ;
Second As Long ' ;
TerminalID As Long ' ; // 终端号
ReaderID As Long ' ; // 读头号
EventType As Long ' ; // 事件类型
EventInfo(4) As String ' ; // 事件信息
End Type
Type BlackListSTRUCT
SerialNO As Byte
CardNO As Long
End Type
'---------------------------------------------------------------------------
' 库函数调用声明-KERNEL32
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
' 库函数调用声明-HD8583
Public Declare Function CreateObject Lib "HD8583.dll" (ByVal hwnd As Long, ByVal COMMTYPE As COMMTYPE, ByVal BasalBitmap As Long, ByVal Lang As CHINESETYPE) As Boolean
Public Declare Sub DestroyObject Lib "HD8583.dll" ()
Public Declare Function SendHD8583 Lib "HD8583.dll" (ByRef HD8583 As HD8583STRUCT, ByRef Buffer As Any, ByRef BufferLength As Long, ByVal OnlyBackData As Long, ByVal bCRC16 As Long) As Boolean
Public Declare Function GetHD8583 Lib "HD8583.dll" (ByRef Buffer As Any, ByVal BufferLength As Long, ByRef HD8583 As HD8583STRUCT) As Boolean
Public Declare Function UnPackHD8583A Lib "HD8583.dll" (ByRef Buffer As Any, ByVal BufferLength As Long, ByRef DataLength As Long) As Long
Public Declare Function IsMACValidA Lib "HD8583.dll" (ByRef WorkKey As Any, ByRef Buffer As Any, ByVal BufferLength As Long) As Boolean
Public Declare Function IsPINValid Lib "HD8583.dll" (ByRef WorkKey As Any, ByVal CardID As Long, ByVal Password As String, ByRef PIN As Any) As Boolean
' 库函数调用声明-Stdfun_HD
Public Declare Function EnumCommPorts Lib "Stdfun_HD.dll" () As String
Public Declare Sub MemSet_HD Lib "Stdfun_HD.dll" (ByRef Dest As Any, ByVal Data As Byte, ByVal Length As Long)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -