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

📄 readic.cpp

📁 应用平台 SCO OpenServer 5 SCO下读磁卡的C程序例子
💻 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 + -