IDCerClass.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /////////////////////////////////////////////////////////////////////////////////
  2. /// Copyright (c) 2012 China Merchants Bank, all rights reserved ///
  3. /// Adapter Interface for Identity Card reader. ///
  4. /// ///
  5. ////////////////////////////////////////////////////////////////////////////////
  6. #ifndef IDCER_CLASS_H
  7. #define IDCER_CLASS_H
  8. #pragma once
  9. #include "DeviceBaseClass.h"
  10. const int IDCER_EIGHT_BYTE_SIZE = 8;
  11. const int MAX_IDCER_SIMPLE_INFO_SIZE = 32;
  12. const int MAX_IDCER_INFO_SIZE = 128;
  13. const int MAX_IDCER_PHOTO_PATH = 260;
  14. //二代身份证信息结构(需要支持外国人永久居留证请使用IDCerInfoEx)
  15. //请务必按照各字段指定格式返回数据
  16. struct IDCerInfo
  17. {
  18. struct Name{
  19. CHAR data[MAX_IDCER_INFO_SIZE];
  20. DWORD dwSize;}name;
  21. struct Sex{
  22. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  23. DWORD dwSize;}sex;
  24. struct Nation{
  25. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  26. DWORD dwSize;}nation;
  27. struct Birthday{//format:1986年10月07日
  28. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  29. DWORD dwSize;}birthday;
  30. struct Address{
  31. CHAR data[MAX_IDCER_INFO_SIZE];
  32. DWORD dwSize;}address;
  33. struct Idno{
  34. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  35. DWORD dwSize;}idno;
  36. struct Department{
  37. CHAR data[MAX_IDCER_INFO_SIZE];
  38. DWORD dwSize;}department;
  39. struct StartDate{//format:2010.08.09
  40. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  41. DWORD dwSize;}startDate;
  42. struct EndDate{ //format:2020.08.09
  43. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  44. DWORD dwSize;}endDate;
  45. struct NewAddress{
  46. CHAR data[MAX_IDCER_INFO_SIZE];
  47. DWORD dwSize;}newAddress;
  48. struct PhotoPath{
  49. CHAR data[MAX_IDCER_PHOTO_PATH];
  50. DWORD dwSize;}photoPath;
  51. };
  52. //二代证信息结构(支持外国人永久居留证)
  53. //请务必按照各字段指定格式返回数据
  54. struct IDCerInfoEx
  55. {
  56. struct Name{//中文姓名
  57. CHAR data[MAX_IDCER_INFO_SIZE];
  58. DWORD dwSize;
  59. }name;
  60. struct Sex{//性别
  61. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  62. DWORD dwSize;
  63. }sex;
  64. struct Nation{//民族(二代证专用)
  65. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  66. DWORD dwSize;
  67. }nation;
  68. struct Birthday{//出生日期,格式:1986年10月07日
  69. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  70. DWORD dwSize;
  71. }birthday;
  72. struct Address{//住址(二代证专用)
  73. CHAR data[MAX_IDCER_INFO_SIZE];
  74. DWORD dwSize;
  75. }address;
  76. struct Idno{//证件号码,二代证指身份证号,外国人指永久居留证号
  77. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  78. DWORD dwSize;
  79. }idno;
  80. struct Department{//二代证指签发机关,外国人指当次申请受理机关代码
  81. CHAR data[MAX_IDCER_INFO_SIZE];
  82. DWORD dwSize;
  83. }department;
  84. struct StartDate{//有效期起始日(签发日)格式:2010.08.09
  85. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  86. DWORD dwSize;
  87. }startDate;
  88. struct EndDate{ //有效期截止日(终止日)格式:2020.08.09
  89. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  90. DWORD dwSize;
  91. }endDate;
  92. struct NewAddress{//最新地址,二代证专用
  93. CHAR data[MAX_IDCER_INFO_SIZE];
  94. DWORD dwSize;
  95. }newAddress;
  96. struct PhotoPath{
  97. CHAR data[MAX_IDCER_PHOTO_PATH];
  98. DWORD dwSize;
  99. }photoPath;
  100. struct EnglishName{//英文姓名,外国人专用
  101. CHAR data[MAX_IDCER_INFO_SIZE];
  102. DWORD dwSize;
  103. }englishName;
  104. struct Nationality{//国籍或地区代码,外国人专用
  105. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  106. DWORD dwSize;
  107. }nationality;
  108. struct IdVersion{//证件版本号,外国人专用
  109. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  110. DWORD dwSize;
  111. }idVersion;
  112. struct IdType{//证件类型标识,外国人取值'I',二代证为空
  113. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  114. DWORD dwSize;
  115. }idType;
  116. struct Reserved{//保留字段,外国人专用
  117. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  118. DWORD dwSize;
  119. }reserved;
  120. struct TXZCode{//通行证号码(港澳台居住证)
  121. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  122. DWORD dwSize;
  123. }txzCode;
  124. struct IssuedSN{//签发次数(港澳台居住证)
  125. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  126. DWORD dwSize;
  127. }issuedSN;
  128. struct Reserved2{//备用2(港澳台居住证)
  129. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  130. DWORD dwSize;
  131. }reserved2;
  132. struct Reserved3{//备用3(港澳台居住证)
  133. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  134. DWORD dwSize;
  135. }reserved3;
  136. struct Reserved4{//备用4(港澳台居住证)
  137. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  138. DWORD dwSize;
  139. }reserved4;
  140. struct Reserved5{//备用5(港澳台居住证)
  141. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  142. DWORD dwSize;
  143. }reserved5;
  144. };
  145. struct IDCerInfoEx2
  146. {
  147. struct Name {//中文姓名
  148. CHAR data[MAX_IDCER_INFO_SIZE];
  149. DWORD dwSize;
  150. }name;
  151. struct Sex {//性别
  152. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  153. DWORD dwSize;
  154. }sex;
  155. struct Nation {//民族(二代证专用)
  156. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  157. DWORD dwSize;
  158. }nation;
  159. struct Birthday {//出生日期,原始格式:19861007
  160. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  161. DWORD dwSize;
  162. }birthday;
  163. struct Address {//住址(二代证专用)
  164. CHAR data[MAX_IDCER_INFO_SIZE];
  165. DWORD dwSize;
  166. }address;
  167. struct Idno {//证件号码,二代证指身份证号,外国人指永久居留证号
  168. CHAR data[2 * MAX_IDCER_SIMPLE_INFO_SIZE]; //拓展至64字节
  169. DWORD dwSize;
  170. }idno;
  171. struct Department {//二代证指签发机关,外国人指当次申请受理机关代码
  172. CHAR data[MAX_IDCER_INFO_SIZE];
  173. DWORD dwSize;
  174. }department;
  175. struct StartDate {//有效期起始日(签发日)原始格式:20200809
  176. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  177. DWORD dwSize;
  178. }startDate;
  179. struct EndDate {//有效期截止日(终止日)原始格式:20200809
  180. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  181. DWORD dwSize;
  182. }endDate;
  183. struct NewAddress {//最新地址,二代证专用
  184. CHAR data[MAX_IDCER_INFO_SIZE];
  185. DWORD dwSize;
  186. }newAddress;
  187. struct PhotoPath {
  188. CHAR data[MAX_IDCER_PHOTO_PATH];
  189. DWORD dwSize;
  190. }photoPath;
  191. struct EnglishName {//英文姓名,外国人专用
  192. CHAR data[MAX_IDCER_INFO_SIZE];
  193. DWORD dwSize;
  194. }englishName;
  195. struct Nationality {//国籍或地区代码,外国人专用
  196. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  197. DWORD dwSize;
  198. }nationality;
  199. struct IdVersion {//证件版本号,外国人专用
  200. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  201. DWORD dwSize;
  202. }idVersion;
  203. struct IdType {//证件类型标识,外国人取值'I',二代证为空
  204. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  205. DWORD dwSize;
  206. }idType;
  207. struct Reserved {//保留字段,外国人专用
  208. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  209. DWORD dwSize;
  210. }reserved;
  211. struct TXZCode {//通行证号码(港澳台居住证)
  212. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  213. DWORD dwSize;
  214. }txzCode;
  215. struct IssuedSN {//签发次数(港澳台居住证)
  216. CHAR data[IDCER_EIGHT_BYTE_SIZE];
  217. DWORD dwSize;
  218. }issuedSN;
  219. struct Reserved2 {//备用2(港澳台居住证)
  220. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  221. DWORD dwSize;
  222. }reserved2;
  223. struct Reserved3 {//备用3(港澳台居住证)
  224. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  225. DWORD dwSize;
  226. }reserved3;
  227. struct Reserved4 {//备用4(港澳台居住证)
  228. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  229. DWORD dwSize;
  230. }reserved4;
  231. struct Reserved5 {//备用5(港澳台居住证)
  232. CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  233. DWORD dwSize;
  234. }reserved5;
  235. };
  236. class IDCerClass : public DeviceBaseClass
  237. {
  238. public:
  239. //
  240. // Open device.
  241. // if usb device,set dwPort=0
  242. //
  243. virtual ErrorCodeEnum DevOpen(DWORD dwPort) = 0;
  244. //
  245. // Optional.
  246. // Open or close RF.
  247. // Arguments:
  248. // - bControl:true:open RF,false close RF
  249. // - 对于吸入式,为true接收身份证插入,为false时弹出身份证并关闭接收身份证插入
  250. //
  251. virtual ErrorCodeEnum IDCerRFControl(bool bControl) = 0;
  252. //
  253. // Optional.
  254. // Certificate authentication.
  255. //
  256. virtual ErrorCodeEnum IDCerAuthenticate() = 0;
  257. // 即将废弃,请使用IDCerGetDataEx
  258. // Get Identity Card info.
  259. //
  260. virtual ErrorCodeEnum IDCerGetData(IDCerInfo &idCerInfo) { return Error_NotImpl; }
  261. // 获取证件信息,包括二代身份证、外国人永久居留证
  262. // Get Identity Card info.
  263. //
  264. virtual ErrorCodeEnum IDCerGetDataEx(IDCerInfoEx &idCerInfoEx){return Error_NotImpl;}
  265. // 强制弹出身份证等证件
  266. // Force ID Card to eject。
  267. //
  268. virtual ErrorCodeEnum ForceIDEject(){return Error_NotImpl;}
  269. // 扫描证件并保留扫描文件到默认路径(dep目录下),证件正面使用“idfront.bmp”,证件反面使用“idback.bmp”
  270. // Scan ID Card and save the image to the position(dep/),using default name "idfront.bmp" and "idback.bmp"。
  271. //
  272. virtual ErrorCodeEnum ScanIDAndSaveImage(){return Error_NotImpl;}
  273. // 获取卡片是否插入或者取走
  274. // Query if ID Card have been inserted or fetched。
  275. // pos:
  276. // -- 0,未检测到任何证件;1,证件在读卡器内部;2,证件在进卡口
  277. //
  278. virtual ErrorCodeEnum QueryCardPos(int &pos){return Error_NotImpl;}
  279. //该接口传回身份证原始UCS2编码文字信息,厂商不必进行编码转换
  280. virtual ErrorCodeEnum IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2) { return Error_NotImpl; }
  281. };
  282. #endif //IDCER_CLASS_H