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

📄 comm.c

📁 一个C语言编写的串口程序
💻 C
字号:
/*****************************
comm.c:对密码器,下载机操作函数
编制人:李健
编制日期:2001/8/31
修改日期:
动态连接:libzfmm.so
*****************************/

#define	 Debug			0

#include <stdio.h>
#include "comm.h"

#define  MACH_ID_LEN		10	/*	机具编号	*/
#define  CHIP_SN_LEN		8	/*	芯片序列号	*/
#define  ACCU_LEN		32	/*	帐号		*/
#define  CHIP_ID_LEN		32	/*	芯片ID		*/
#define  VK_LEN			160	/*	VK		*/
#define  KEY_NUM_LEN		2	/*	密钥号		*/
#define  AK_LEN			32	/*	AK支		*/
#define  SIG_LEN		16	/*	SIG		*/
#define  UNLOCK_CODE_LEN	16	/*	解锁密码	*/
#define  PADDING_LEN		30	/*	填充位 0	*/
#define  SERVICE_LEN		2	/*	业务种类	*/
#define  DATE_LEN		8	/*	日期		*/
#define  TICKET_NUM_LEN		8	/*	凭证号码	*/
#define  BANLANCE_LEN		16	/*	金额		*/
#define  PAY_CODE_LEN		20	/*	联机支付密码长度*/
#define  ICZFMM_LEN		500	/*	对照表长度	*/


/*	读机具号和芯片SN ,出口参数MACH_ID,CHIP_SN	*/ 
int 	Read_Sn(char *MACH_ID,char *CHIP_SN)
{
	int ret;
	char rece_buffer[PACKLEN];

	memset(rece_buffer,0,PACKLEN);

	ret=PORT_RW(READ_SN,"",rece_buffer);
	#if Debug>0
	fprintf(stderr,"\nRead_Sn ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	#if Debug>0
	fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
	#endif

	strncpy(MACH_ID,rece_buffer,MACH_ID_LEN);
	strncpy(CHIP_SN,&rece_buffer[MACH_ID_LEN],CHIP_SN_LEN);
	
	return True;

 }

/*	生成密钥对,入口参数:ACCU,出口参数:CHIP_ID,VK	*/
int 	Gen_Keypair(char *ACCU,char *CHIP_ID,char *VK)
{
	int ret;
	char rece_buffer[PACKLEN];
	char send_buffer[PACKLEN];
	char accu[ACCU_LEN];

	memset(rece_buffer,0,PACKLEN);
	memset(send_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,accu);

	ret=PORT_RW(GEN_KEYPAIR,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n生成密钥对ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	#if Debug>0
	fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
	#endif

	strncpy(CHIP_ID,rece_buffer,CHIP_ID_LEN);
	strncpy(VK,&rece_buffer[CHIP_ID_LEN],VK_LEN);

	return True;
}

/*	下载AK支,入口参数:ACCU,KEY_NUM,AK支		*/
int 	Load_Ak(char *ACCU,char *KEY_NUM,char *AK)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char accu[ACCU_LEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,accu);
	strcat(send_buffer,KEY_NUM);
	strcat(send_buffer,AK);

	ret=PORT_RW(LOAD_AK,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n下载AKret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	#if Debug>0
	fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
	#endif

	return True;
}

/*	删除帐号,入口参数:ACCU				*/
int 	Del_Accu(char *ACCU)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char accu[ACCU_LEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,accu);

	ret=PORT_RW(DEL_ACCU,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n删除帐号ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	return True;
}

/*	增发签名,入口参数:ACCU,CHIP_ID,VK,出口参数:SIG	*/
int 	Add_Sig(char *ACCU,char *CHIP_ID,char *VK,char *SIG)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char accu[ACCU_LEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,accu);
	strcat(send_buffer,CHIP_ID);
	strcat(send_buffer,VK);

	ret=PORT_RW(ADD_SIG,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n增发ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	strncpy(SIG,rece_buffer,SIG_LEN);

	return True;
}

/*	解锁,入口参数:UNLOCK_CODE			*/
int 	Unlock_Mach(char *UNLOCK_CODE)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	strcat(send_buffer,UNLOCK_CODE);

	ret=PORT_RW(UNLOCK,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n解锁ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	return True;
}

/*	发行机具,入口参数:UNLOCK_CODE			*/
int 	Dist_Mach(char *UNLOCK_CODE)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	strcat(send_buffer,UNLOCK_CODE);

	ret=PORT_RW(DIST_MACH,send_buffer,rece_buffer);
	#if Debug>0
	fprintf(stderr,"\n发行机具ret=%d\n",ret);
	#endif
	if (ret!=True)	
		return ret;

	#if Debug>0
	fprintf(stderr,"发行机具rece_buffer=%s\n",rece_buffer);
	#endif

	return True;
}

/*	联机计算支付密码,入口参数:PLAIN_TXT:(ACCU,SERVICE,DATE,TICKET_NUM,
						BANLANCE)	
	 		 出口参数:PAY_CODE		*/
int 	Conn_Calu(char *PLAIN_TXT,char *PAY_CODE)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char PADDING[PADDING_LEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);


	/*	填充0		*/
	memset(PADDING,'0',PADDING_LEN);

	strncpy(send_buffer,PADDING,PADDING_LEN);
	strncpy(&send_buffer[30],PLAIN_TXT,strlen(PLAIN_TXT));

	ret=PORT_RW(CONN_CALU,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	#if Debug>0
	fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
	#endif

	strncpy(PAY_CODE,rece_buffer,PAY_CODE_LEN);

	return True;
}


/******************************************************************************/
/*	初始化IC卡,入口参数:ICMM					      */
/******************************************************************************/
int 	Init_Ic(char *ICMM)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	strcat(send_buffer,ICMM);

	ret=PORT_RW(INIT_IC,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	return True;
}

/******************************************************************************/
/*	验证密码,入口参数:ICMM					      */
/******************************************************************************/
int 	Ver_Icmm(char *ICMM)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	strcat(send_buffer,ICMM);

	ret=PORT_RW(VER_ICMM,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	return True;
}

/******************************************************************************/
/*	修改密码,入口参数:ICMM					      */
/******************************************************************************/
int 	Chg_Icmm(char *ICMM)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	strcat(send_buffer,ICMM);

	ret=PORT_RW(CHG_ICMM,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	return True;
}

/******************************************************************************/
/*	比较算法芯片号							      */
/******************************************************************************/
int 	Comp_Chipno()
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);

	ret=PORT_RW(COMP_CHIPNO,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	return True;
}

/******************************************************************************/
/*	产生支付密码对照表,入口参数:ICMM
				    ACCU,SERVICE,DATE,TICKET_NUM_B,TICKET_NUM_E	
	 		   出口参数:PAY_CODE				      */
/******************************************************************************/
int 	Iczfmm(char *ICMM,char *ACCU,char *SERVICE,char *DATE,
	       char *TICKET_NUM_B,char *TICKET_NUM_E,char *PAY_CODE)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char accu[ACCU_LEN];
	char PADDING[PADDING_LEN];
	
	ret=Comp_Chipno();
	if (ret!=True)	
		return 99;

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	填充0		*/
	memset(PADDING,'0',PADDING_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,PADDING);
	strcat(send_buffer,ICMM);
	strcat(send_buffer,accu);
	strcat(send_buffer,SERVICE);
	strcat(send_buffer,DATE);
	strcat(send_buffer,TICKET_NUM_B);
	strcat(send_buffer,TICKET_NUM_E);

	ret=PORT_RW(ICZFMM,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	strncpy(PAY_CODE,rece_buffer,ICZFMM_LEN);

	return True;
}

/******************************************************************************/
/*	ACE平台产生支付密码对照表,入口参数:ICMM,ACCU,PLAIN_TXT
	PLAIN_TXT包括 SERVICE,DATE,TICKET_NUM_B,TICKET_NUM_E	
	 		          出口参数:PAY_CODE			      */
/******************************************************************************/
int 	ACE_Iczfmm(char *ICMM, char *ACCU,char *PLAIN_TXT,char *PAY_CODE)
{
	int ret;
	char send_buffer[PACKLEN];
	char rece_buffer[PACKLEN];
	char accu[ACCU_LEN];
	char PADDING[PADDING_LEN];
	
	ret=Comp_Chipno();
	if (ret!=True)	
		return 99;

	memset(send_buffer,0,PACKLEN);
	memset(rece_buffer,0,PACKLEN);
	memset(accu,0,ACCU_LEN);

	/*	填充0		*/
	memset(PADDING,'0',PADDING_LEN);

	/*	过滤帐号	*/
	ACCU_accu(ACCU,accu);

	strcat(send_buffer,PADDING);
	strcat(send_buffer,ICMM);
	strcat(send_buffer,accu);
	strcat(send_buffer,PLAIN_TXT);

	ret=PORT_RW(ICZFMM,send_buffer,rece_buffer);
	if (ret!=True)	
		return ret;

	strncpy(PAY_CODE,rece_buffer,ICZFMM_LEN);

	return True;
}
/*	过滤帐号				*/
ACCU_accu(char *inbuf,char outbuf[32])
{
	int i,j;
	
	j=0;
	memset(outbuf,'0',32);

	for(i=strlen(inbuf)-1;i>=0;i--)
	  if (inbuf[i]>='0'&&inbuf[i]<='9')
	  {
		outbuf[31-j]=inbuf[i];
		j++;
	  }
	
	return;
}

/*				*/
fillamt(char *inbuf,char outbuf[16])
{
	int i,j;
	
	j=0;
	memset(outbuf,'0',16);
	for(i=strlen(inbuf)-1;i>=0;i--)
	  if (inbuf[i]>='0'&&inbuf[i]<='9')
	  {
		outbuf[15-j]=inbuf[i];
		j++;
	  }
	
	return;
}

/*				*/
fillzfmm(char *inbuf,char outbuf[20])
{
	int i,j;
	
	j=0;
	memset(outbuf,'0',20);

	for(i=strlen(inbuf)-1;i>=0;i--)
	  if (inbuf[i]>='0'&&inbuf[i]<='9')
	  {
		outbuf[19-j]=inbuf[i];
		j++;
	  }
	
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -