📄 readic.cpp
字号:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <malloc.h>
#include <string.h>
#include "readic.h"
#include "fcidc.h"
#define RIGHT 1
#define LEFT 0
char data[20][90];
int deformatString(char *dest, char *source, char symbol,int align);
int readRec(char * EFID,int nRecNum);
int main(void)
{
DMData dmData;
int nRtn=1,nPort=1;
printf("正在读卡...\n");
nRtn=readDataFromIC( nPort,&dmData);
if (nRtn)
{
printf("读卡失败,请参看IC_CODE.TXT\n");
return 1;
}
printf("jgdm is: %s\n",dmData.jgdm);
printf("jgmc is: %s\n",dmData.jgmc);
printf("jgdz is: %s\n",dmData.jgdz);
printf("jglxmc is: %s\n",dmData.jglxmc);
printf("jglxdm is: %s\n",dmData.jglxdm);
printf("bfdw is: %s\n",dmData.bfdw);
printf("bfrq is: %s\n",dmData.bfrq);
printf("fddbr is: %s\n",dmData.fddbr);
printf("jjlxdm is: %s\n",dmData.jjlxdm);
printf("jjlxmc is: %s\n",dmData.jjlxmc);
printf("zch is: %s\n",dmData.zch);
printf("zczj is: %s\n",dmData.zczj);
printf("hbdm is: %s\n",dmData.hbdm);
printf("hbmc is: %s\n",dmData.hbmc);
printf("gbdm is: %s\n",dmData.gbdm);
printf("gbmc is: %s\n",dmData.gbmc);
printf("xzqh is: %s\n",dmData.xzqh);
printf("yzbm is: %s\n",dmData.yzbm);
printf("dhhm is: %s\n",dmData.dhhm);
printf("njrq is: %s\n",dmData.njrq);
printf("njqx is: %s\n",dmData.njqx);
printf("jjfw is: %s\n",dmData.jyfw);
printf("jjhy is: %s\n",dmData.jjhy);
printf("\n");
return 0;
}
int readDataFromIC(int nPort,DMData *dmData)
{
int nRtn=0,i;
char strResult[255]="E000",szSerialNo[20],dest[255];
FILE *fp;
if ((fp=fopen("ic_code.txt","w"))==NULL)
{
return 1;
}
//memset(strResult1,0,254);
nRtn=fci_Init(nPort,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("初始化辅口出错!\n",fp);
fclose(fp);
//printf("初始化辅口出错!\n");
return 1;
}
nRtn=fci_ActiveCard(1,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("IC卡上电出错!\n",fp);
fclose(fp);
//printf("IC卡上电出错!\n");
return 1;
}
nRtn=fci_SelectDF("DMDF", strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("选IC上文件出错!\n",fp);
fclose(fp);
return 1;
}
nRtn=fci_SelectEF("D001", strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("选IC上文件D001出错!\n",fp);
fclose(fp);
return 1;
}
//read serialsno
nRtn=fci_ReadRecord(1,0,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("读IC卡号出错!\n",fp);
fclose(fp);
//printf("读IC(cnos)上记录出错!\n");
return 1;
}
else
{
//deformatString(dest, strResult,' ',0);
//strcpy(strResult,dest);
//fputs((const char*)dest+19,fp);
memcpy(szSerialNo,strResult+19,12);
szSerialNo[12]=0;
//printf("serialno is :%s\n",szSerialNo);
fputc(10,fp);
}
//verify AR _key
nRtn=fci_CardExternalAuth(5, szSerialNo,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("校验AR_KEY出错!",fp);
fclose(fp);
//printf("选IC(cnos)上文件出错!\n");
return 1;
}
nRtn=readRec("D002",7);
if (nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("Read D002 Error!",fp);
fclose(fp);
//printf("选IC(cnos)上文件出错!\n");
return 1;
}
strncpy((char*)dmData->jgdm,data[0],9);
dmData->jgdm[9]=0;
strncpy((char*)dmData->jgmc,data[1],70);
dmData->jgmc[70]=0;
strncpy((char*)dmData->jgdz,data[2],70);
dmData->jgdz[70]=0;
strncpy((char*)dmData->jglxmc,data[3],16);
dmData->jglxmc[16]=0;
strncpy((char*)dmData->jglxdm,data[4],1);
dmData->jglxdm[1]=0;
strncpy((char*)dmData->bfdw,data[5],70);
dmData->bfdw[70]=0;
strncpy((char*)dmData->bfrq,data[6],8);
dmData->bfrq[8]=0;
nRtn=readRec("D003",12);
if (nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("Read D003 Error!",fp);
fclose(fp);
return 1;
}
strncpy((char*)dmData->fddbr,data[0],20);
dmData->fddbr[20]=0;
strncpy((char*)dmData->jjlxdm,data[1],2);
dmData->jjlxdm[2]=0;
strncpy((char*)dmData->jjlxmc,data[2],40);
dmData->jjlxmc[40]=0;
strncpy((char*)dmData->zch,data[3],26);
dmData->zch[26]=0;
strncpy((char*)dmData->zczj,data[4],6);
dmData->zczj[6]=0;
strncpy((char*)dmData->hbdm,data[5],3);
dmData->hbdm[3]=0;
strncpy((char*)dmData->hbmc,data[6],8);
dmData->hbmc[8]=0;
strncpy((char*)dmData->gbdm,data[7],3);
dmData->gbdm[3]=0;
strncpy((char*)dmData->gbmc,data[8],24);
dmData->gbmc[24]=0;
strncpy((char*)dmData->xzqh,data[9],6);
dmData->xzqh[6]=0;
strncpy((char*)dmData->yzbm,data[10],6);
dmData->yzbm[6]=0;
strncpy((char*)dmData->dhhm,data[11],16);
dmData->dhhm[16]=0;
nRtn=readRec("D004",2);
if (nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("Read D004 Error!",fp);
fclose(fp);
return 1;
}
strncpy((char*)dmData->njqx,data[0],8);
dmData->njqx[8]=0;
strncpy((char*)dmData->njrq,data[1],8);
dmData->njrq[8]=0;
nRtn=readRec("E001",2);
if (nRtn)
{
fci_CloseCard(strResult);
fputs("999999999",fp);
fputc(10,fp);
fputs("read E001 Error!",fp);
fclose(fp);
return 1;
}
strncpy((char*)dmData->jyfw,data[0],70);
dmData->njrq[70]=0;
strncpy((char*)dmData->jjhy,data[1],50);
dmData->njqx[50]=0;
fci_CloseCard(strResult);
fclose(fp);
return 0;
}
int readRec(char * EFID,int nRecNum)
{
int nRtn=0,i;
char strResult[255]="E000",szSerialNo[20],dest[255];
nRtn=fci_SelectEF(EFID,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
return 1;
}
for(i=0;i<=nRecNum-1;i++)
{
nRtn=fci_ReadRecord(i+1,0,strResult);
if (!nRtn)
{
fci_CloseCard(strResult);
return 1;
}
else
{
strncpy(data[i],strResult+19,strlen(strResult)-19);
data[i][strlen(strResult)-19]=0;
}
}
return 0;
}
int deformatString(char *dest, char *source, char symbol,int align)
{
int i;
if (align==1)
while(*source++)
{
if (*source!=symbol)
{
dest=source;
return strlen(dest);
}
}
else
{
i=strlen(source);
while(i)
if (source[--i]!=symbol)
{
source[i+1]=0;
memcpy(dest,source,i+1);
dest[i+1]=0;
return strlen(dest);
}
}
}
/*int getSerialNo(char * szSerialNo)
{
int nRtn;
char strResult[255];
nRtn = fci_SelectEF("D001", strResult);
if (!nRtn) return nRtn;
nRtn = fci_ReadRecord(1, 0, strResult);
if (!nRtn) return nRtn;
memcpy(szSerialNo,strResult+19,12);
szSerialNo[12]=0;
return TRUE;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -