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

📄 lz.c

📁 8583的应用 8583的应用 8583的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>;  
#include <string.h>;  
#include <stddef.h>;  
#include "AB8583.h"  
#define SIZEOF(type,value)((int)(sizeof(((type *)0)->;value)))  
#define CHG(value)AB_BIT_##value,offsetof(AB8583,value),SIZEOF(AB8583,value)  

#define CHG_HTON1  
#define CHG_NTOH2  
#define CHG_HTOS3  
#define CHG_STOH4  
#defineCHAR_CREDIT'C'  
#defineCHAR_DEBIT'D'  

typedef struct  
{  
intbitName;  
intoffset;  
intvalsize;  
intsize;  
int(*chgF)(int chg,void *value,int size,  
char *buf,int bufLen,int *bufUse);  
} AB8583Chg;  

static int chg_char_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_str_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_str_llvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_str_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_bit_bit(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_long_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_long_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_double_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_double_xn(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_SecurityCtrlInfo_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_BalanceAmount_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_MessageIndicator_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_AuthOperationCode_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_OriginalDataElements_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  
static int chg_ReplacementAmounts_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse);  

static AB8583ChgchgList[]  
={  

{ CHG(extend_bitmap),64, chg_bit_bit },  
{ CHG(primary_account_number),19, chg_str_llvar },  
{ CHG(processing_code),6,  chg_str_n },  
{ CHG(amount_of_transactions),12, chg_double_n },  
{ CHG(amount_of_settlement),10, chg_double_n },  
{ CHG(transmission_date_and_time),10, chg_long_n },  
{ CHG(system_trace_audit_number),6,  chg_long_n },  
{ CHG(time_of_local_transaction),6,  chg_str_n },  
{ CHG(date_of_local_transaction),4,  chg_str_n },  
{ CHG(date_of_settlement),4,  chg_str_n },  
{ CHG(date_of_capture),4,  chg_str_n },  
{ CHG(business_type),3,  chg_str_n },  
{ CHG(point_of_service_entry_mode),3,  chg_str_n },  
{ CHG(point_of_service_PIN_capture_code),2,  chg_str_n },  
{ CHG(fee_of_transaction),8,  chg_double_n },  
{ CHG(fee_of_kick_back),8,  chg_double_xn },  
{ CHG(acquiring_institution_id_code),11, chg_str_llvar },  
{ CHG(forwarding_institution_id_code),11, chg_str_llvar },  
{ CHG(track_2_data),37, chg_str_llvar },  
{ CHG(track_3_data),104,chg_str_lllvar },  
{ CHG(retrieval_reference_number),12, chg_str_n },  
{ CHG(auth_id_response),6,  chg_str_n },  
{ CHG(response_code),2,  chg_str_n },  
{ CHG(card_acceptor_terminal_id),8,  chg_str_n },  
{ CHG(card_acceptor_id_code),15, chg_str_n },  
{ CHG(card_acceptor_name_location),40, chg_str_n },  
{ CHG(additional_response_data),25, chg_str_llvar },  
{ CHG(broadcast_message),999,chg_str_lllvar },  
{ CHG(currency_code_of_transaction),3,  chg_str_n },  
{ CHG(currency_code_of_settlement),3,  chg_str_n },  
{ CHG(PIN),64, chg_bit_bit },  
{ CHG(security_ctrl_info),16, chg_SecurityCtrlInfo_n },  
{ CHG(balance_amount),43, chg_BalanceAmount_n },  
{ CHG(second_account_number),19, chg_str_n },  
{ CHG(message_indicator),5, chg_MessageIndicator_lllvar},  
{ CHG(auth_operation_code),       22,chg_AuthOperationCode_lllvar},  
{ CHG(auth_agent_institution_id_code),11, chg_str_lllvar },  
{ CHG(destination_institution_id_code),11, chg_str_lllvar },  
{ CHG(MAC64),64, chg_bit_bit},  
{ CHG(settlement_code),1,  chg_char_n },  
{ CHG(network_management_information_code),3,  chg_str_n },  
{ CHG(date_of_action),6,  chg_str_n },  
{ CHG(number_of_credits),10, chg_long_n },  
{ CHG(reversal_number_of_credits),10, chg_long_n },  
{ CHG(number_of_debits),10, chg_long_n },  
{ CHG(reversal_number_of_debits),10, chg_long_n },  
{ CHG(number_of_transfer),10, chg_long_n },  
{ CHG(reversal_number_of_transfer),10, chg_long_n },  
{ CHG(number_of_inquiries),10, chg_long_n },  
{ CHG(number_of_authorizations),10, chg_long_n },  
{ CHG(processing_fee_amount_of_credits),12, chg_double_n },  
{ CHG(processing_fee_amount_of_debits),12, chg_double_n },  
{ CHG(amount_of_credits),16, chg_double_n },  
{ CHG(reversal_amount_of_credits),16, chg_double_n },  
{ CHG(amount_of_debits),16, chg_double_n },  
{ CHG(reversal_amount_of_debits),16, chg_double_n },  
{ CHG(original_data_elements),42, chg_OriginalDataElements_n},  
{ CHG(replacement_amounts),42, chg_ReplacementAmounts_n },  
{ CHG(message_security_code),64, chg_bit_bit },  
{ CHG(amount_of_net_settlement),16, chg_double_xn },  
{ CHG(settlement_institution_id_code),11, chg_str_llvar },  
{ CHG(receiveing_institution_id_code),11, chg_str_llvar },  
{ CHG(trans_rem),100,chg_str_lllvar },  
{ CHG(sender_institution_id_code),11, chg_str_lllvar },  
{ CHG(sender_reference_number),12, chg_long_lllvar },  
{ CHG(pid_no),15, chg_str_lllvar },  
{ CHG(operator),16,  chg_str_lllvar },  
{ CHG(checker),16,  chg_str_lllvar },  
{ CHG(add_auth_id_response),13,  chg_str_lllvar },  
{ CHG(MAC),64, chg_bit_bit},  

{ 0,0,0,0,NULL}  

};  

static int chg_move(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
if (*bufUse+size>;bufLen)  
return(-1);  
switch(chg)  
{  
case CHG_HTOS:  
memcpy(buf+*bufUse,value,size);break;  
case CHG_STOH:  
memcpy(value,buf+*bufUse,size);break;  
default:  
return(-1);  
};  
*bufUse=*bufUse+size;  
return(0);  
}  
static int chg_str_move(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
intlen;  

switch(chg)  
{  
case CHG_HTOS:  
len=strlen((char *)value);  
if ((len>;size)||(*bufUse+len>;bufLen))  
return(-1);  
strcpy(buf+*bufUse,(char *)value);  
*bufUse=*bufUse+len+1;  
break;  
case CHG_STOH:  
len=strlen(buf+*bufUse);  
if ((len>;size)||(*bufUse+len>;bufLen))  
return(-1);  
strcpy((char *)value,buf+*bufUse);  
*bufUse=*bufUse+len+1;  
break;  
default:  
return(-1);  
};  
return(0);  
}  

static int chg_char_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
switch(chg)  
{  
case CHG_HTON:  
if (*bufUse+size>;bufLen)  
return(-1);  
memcpy(buf+*bufUse,value,size);  
*bufUse=*bufUse+size;  
break;  
case CHG_NTOH:  
if (*bufUse+size>;bufLen)  
return(-1);  
memcpy(value,buf+*bufUse,size);  
*bufUse=*bufUse+size;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_move(chg,value,size,buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  

static int chg_str_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
intlen,i;  

switch(chg)  
{  
case CHG_HTON:  
if (*bufUse+size>;bufLen)  
return(-1);  
len=strlen((char *)value);  
strncpy(buf+*bufUse,(char *)value,size);  
if (len<size)  
memset(buf+*bufUse+len,' ',size-len);  
*bufUse=*bufUse+size;  
break;  
case CHG_NTOH:  
if (*bufUse+size>;bufLen)  
return(-1);  
strncpy((char *)value,buf+*bufUse,size);  
((char *)value)[size]='\0';  
for(i=size-1; i>;0&&(((char *)value)==' '); --i)  
((char *)value)='\0';  
*bufUse=*bufUse+size;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  

static int chg_str_llvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
inti,len;  
char*s;  
charc1,c2;  

s=(char *)value;  
switch(chg)  
{  
case CHG_HTON:  
len=strlen(s);  
if ((len>;99)||(len>;size)||(*bufUse+len+2>;bufLen))  
return(-1);  
buf[*bufUse]=(char)('0'+len/10);  
buf[*bufUse+1]=(char)('0'+len%10);  
if (len>;0)  
strncpy(buf+*bufUse+2,s,len);  
*bufUse=*bufUse+2+len;  
break;  
case CHG_NTOH:  
if (*bufUse+2>;bufLen)  
return(-1);  
c1=buf[*bufUse];  
c2=buf[*bufUse+1];  
if ((c1<'0')||(c1>;'9')||(c2<'0')||(c2>;'9'))  
return(-1);  
len=(c1-'0')*10+(c2-'0');  
if (*bufUse+2+len>;bufLen)  
return(-1);  
if (len>;0)  
memcpy(s,buf+*bufUse+2,len);  
s[len]='\0';  
*bufUse=*bufUse+2+len;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  

static int chg_str_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
inti,len;  
char*s;  
charc1,c2,c3;  

s=(char *)value;  
switch(chg)  
{  
case CHG_HTON:  
len=strlen(s);  
if ((len>;999)||(len>;size)||(*bufUse+len+3>;bufLen))  
return(-1);  
buf[*bufUse]=(char)('0'+len/100);  
buf[*bufUse+1]=(char)('0'+(len%100)/10);  
buf[*bufUse+2]=(char)('0'+len%10);  
if (len>;0)  
strncpy(buf+*bufUse+3,s,len);  
*bufUse=*bufUse+3+len;  
break;  
case CHG_NTOH:  
if (*bufUse+2>;bufLen)  
return(-1);  
c1=buf[*bufUse];  
c2=buf[*bufUse+1];  
c3=buf[*bufUse+2];  
if ((c1<'0')||(c1>;'9')  
||(c2<'0')||(c2>;'9')  
||(c3<'0')||(c3>;'9'))  
return(-1);  
len=(c1-'0')*100+(c2-'0')*10+(c3-'0');  
if (*bufUse+3+len>;bufLen)  
return(-1);  
if (len>;0)  
memcpy(s,buf+*bufUse+3,len);  
s[len]='\0';  
*bufUse=*bufUse+3+len;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  
static int chg_bit_bit(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
switch(chg)  
{  
case CHG_HTON:  
if (*bufUse+size/8>;bufLen)  
return(-1);  
memcpy(buf+*bufUse,value,size/8);  
*bufUse=*bufUse+size/8;  
break;  
case CHG_NTOH:  
if (*bufUse+size/8>;bufLen)  
return(-1);  
memcpy(value,buf+*bufUse,size/8);  
*bufUse=*bufUse+size/8;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_move(chg,value,size/8,buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  

static int chg_long_n(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
unsigned long*v;  
chars[32];  
intlen;  
charformat[16];  

v=(unsigned long *)value;  
switch(chg)  
{  
case CHG_HTON:  
if (*bufUse+size>;bufLen)  
return(-1);  
sprintf(format,"%%0%du",size);  
sprintf(s,format,*v);  
len=strlen(s);  
if (len!=size)  
return(-1);  
memcpy(buf+*bufUse,s,len);  
*bufUse=*bufUse+size;  
break;  
case CHG_NTOH:  
if (*bufUse+size>;bufLen)  
return(-1);  
if (size>;30)  
return(-1);  
memcpy(s,buf+*bufUse,size);  
s[size]='\0';  
if (sscanf(s,"%u",v)!=1)  
return(-1);  
*bufUse=*bufUse+size;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  
static int chg_long_lllvar(int chg,void *value,  
int size,char *buf,int bufLen,int *bufUse)  
{  
unsigned long*v;  
chars[32];  
intlen;  
charformat[16];  

v=(unsigned long *)value;  
switch(chg)  
{  
case CHG_HTON:  
if (*bufUse+size+3>;bufLen)  
return(-1);  
sprintf(s,"%u",*v);  
len=strlen(s);  
if (len>;size)  
return(-1);  
buf[*bufUse]='0'+(char)(len/100);  
buf[*bufUse+1]='0'+(char)((len%100)/10);  
buf[*bufUse+2]='0'+(char)(len%10);  
memcpy(buf+(*bufUse)+3,s,len);  
*bufUse=*bufUse+len+3;  
break;  
case CHG_NTOH:  
if (*bufUse+3>;bufLen)  
return(-1);  
if (buf[*bufUse]<'0'||buf[*bufUse]>;'9'  
||buf[*bufUse+1]<'0'||buf[*bufUse+1]>;'9'  
||buf[*bufUse+2]<'0'||buf[*bufUse+2]>;'9')  
return(-1);  
len=(buf[*bufUse]-'0')*100+(buf[*bufUse+1]-'0')  
+(buf[*bufUse+2]-'0');  
if (len>;size)  
return(-1);  
if (*bufUse+len+3>;bufLen)  
return(-1);  
if (len>;30)  
return(-1);  
memcpy(s,buf+*bufUse+3,len);  
s[len]='\0';  
if (sscanf(s,"%u",v)!=1)  
return(-1);  
*bufUse=*bufUse+3+len;  
break;  
case CHG_HTOS:  
case CHG_STOH:  
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse));  
default:  
return(-1);  
};  
return(0);  
}  
static void del_dot(char *s)  
{  
inti=0;  
intd=0;  

while(s!='\0')  
{  
if (s=='.')  
d=1;  
if (d)  
s=s[i+1];  
++i;  
};  
}  
static int add_dot(char *s)  
{  
intlen;  
inti;  

i=0;  
while(s==' ')  
++i;  
if (i!=0)  
strcpy(s,s+i);  

len=strlen(s);  
if (len<2)  
return(-1);  

for(i=0; i<len; ++i)  
if (s<'0'||s>;'9')  
return(-1);  
s[len+1]='\0';  
s[len]  =s[len-1];  
s[len-1]=s[len-2];  
s[len-2]='.';  
return(0);  
}  

static int chg_double_n(int chg,void *value,  

⌨️ 快捷键说明

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