📄 isoapp.cpp
字号:
EXPORT BOOL APPMSG::IsAFJPMessageToInst(void)
{
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
int iOffset = FieldOffset(3);
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// UserTrxCode [x..y=6]
(memcmp((PBYTE)&chMsg[iOffset], "911300", 6) == 0)
);
}
// Es valido el logon?
EXPORT BOOL APPMSG::IsSOATLogon(void)
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [6]
(memcmp((PBYTE)&chMsg[iOffset+iType], "012000", 6) == 0)
);
}
// Es valido el logon duplicado?
EXPORT BOOL APPMSG::IsSOATDuplicatedLogon(void)
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [6]
(memcmp((PBYTE)&chMsg[iOffset+iType], "012001", 6) == 0)
);
}
// Es valido el logoff?
EXPORT BOOL APPMSG::IsSOATLogoff(void)
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [6]
(memcmp((PBYTE)&chMsg[iOffset+iType], "012002", 6) == 0)
);
}
// Verificacion externa de parametros
EXPORT BOOL APPMSG::CheckExternParameters(PBYTE pbFileName)
{
// Temp. return value
BOOL bReturnValue = FALSE;
// Retorno de configuracion parametrica de bitmaps
bReturnValue = (pbFileName == NULL)
? GetAllBitmapsDescriptions((PSTR)ISO8583_PROFILE_NAME)
: GetAllBitmapsDescriptions((PSTR)pbFileName);
// Retorno de configuracion parametrica de campos
bReturnValue = (pbFileName == NULL)
? GetFieldsDescription((PSTR)ISO8583_PROFILE_NAME)
: GetFieldsDescription((PSTR)pbFileName);
// Return value
return (bReturnValue);
}
EXPORT BOOL APPMSG::IsSOATGenericInquiry(void) // Consulta Generica SOAT?
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [2+2+2]
(memcmp((PBYTE)&chMsg[iOffset+iType], "05", 2) == 0)
&&
(isdigit(chMsg[iOffset+iType+2]) && isdigit(chMsg[iOffset+iType+2+1]))
&&
(memcmp((PBYTE)&chMsg[iOffset+iType+4], "00", 2) == 0)
);}
EXPORT BOOL APPMSG::IsSOATGenericInsertion(void) // Insercion Generica SOAT?
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return(( (memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) )
&&
// SOATTrxCode [2+2+2]
(memcmp((PBYTE)&chMsg[iOffset+iType], "02", 2) == 0)
&&
(isdigit(chMsg[iOffset+iType+2]) && isdigit(chMsg[iOffset+iType+2+1]))
&&
(memcmp((PBYTE)&chMsg[iOffset+iType+4], "00", 2) == 0)
);
}
EXPORT BOOL APPMSG::IsSOATGenericDeletion(void) // Borrado Generico SOAT?
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return(( (memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) )
&&
// SOATTrxCode [2+2+2]
(memcmp((PBYTE)&chMsg[iOffset+iType], "04", 2) == 0)
&&
(isdigit(chMsg[iOffset+iType+2]) && isdigit(chMsg[iOffset+iType+2+1]))
&&
(memcmp((PBYTE)&chMsg[iOffset+iType+4], "00", 2) == 0)
);
}
EXPORT BOOL APPMSG::IsSOATGenericUpdate(void) // Actualizacion Generica SOAT?
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return(((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) )
&&
// SOATTrxCode [2+2+2]
(memcmp((PBYTE)&chMsg[iOffset+iType ], "03", 2) == 0)
&&
(isdigit(chMsg[iOffset+iType+2]) && isdigit(chMsg[iOffset+iType+2+1]))
&&
(memcmp((PBYTE)&chMsg[iOffset+iType+4], "00", 2) == 0)
);
}
EXPORT BOOL APPMSG::IsSOATGenericRequest(void) // Pedido Generico SOAT?
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return(( (memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) )
&&
// SOATTrxCode [6] : Cualquier codigo numerico de 6 digitos
( isdigit(chMsg[iOffset+iType] ) && isdigit(chMsg[iOffset+iType+1]) &&
isdigit(chMsg[iOffset+iType+2]) && isdigit(chMsg[iOffset+iType+3]) &&
isdigit(chMsg[iOffset+iType+4]) && isdigit(chMsg[iOffset+iType+5])
)
);
}
// Es valido el comando del sistema?
EXPORT BOOL APPMSG::IsSOATSystemCmd(void)
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [6]
(memcmp((PBYTE)&chMsg[iOffset+iType], "010000", 6) == 0)
);
}
// Es valido el logon para cambio de clave?
EXPORT BOOL APPMSG::IsSOATLogonPassword(void)
{
// SOAT-TrxCode S-126
if(!IsValidField(126))
return (FALSE);
// Los codigos de transaccion de usuario en el sistema SOAT no
// respetan el estandard ISO-8583 y vienen informados en un
// mensaje propietario en el campo 126...
// SOATUserTrxCode [x..y=6]
int iOffset = FieldOffset(126),
iType = FieldType(126) ;
// Message-Type-Identifier [12..15=4]
return((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// SOATTrxCode [6]
(memcmp((PBYTE)&chMsg[iOffset+iType], "012003", 6) == 0)
);
}
EXPORT BOOL APPMSG::IsATMTransaction(void) // ATM?
{
// El Tipo de Trx esta alguno Ok?
if( IsATMBalanceInquiry() || // Consulta de saldos
IsATMTransfer() || // Transferencia
IsATMTransferCBU() || // Transferencia x CBU
IsATMTransferInterbank() || // Transferencia interbancaria
IsATMWithdrawal() || // Extraccion
IsATMDeposit() || // Deposito
IsATMFastCash() || // FastCash o compra
IsATMAccountVerification() || // Verificacion cuenta destino
IsATMPayment() || // Pagos
IsATMBuying() || // Compras y relacionados
IsATMAutServicePayment() || // Pagos Automatico de Servs.
IsATMOthersMsgs() || // Otros mensajes
IsATMLastMovInquiry() || // Ult. Movimientos
IsATMPinChange() || // Cambio de PIN
IsATMAssignHomeBankUser() || // Asigancion usuario HB
IsATMExchangeRateInquiry() // Consulta tipo de cambio
)
return (TRUE);
// Tipo Trx invalido
return (FALSE);
}
BOOL APPMSG::IsValidFromAccountType(int iOffset) // Tipo de Cta valido ?
{
return ( (memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SPECIAL_ACCOUNT_AFJP , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT_BOND , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT_BOND, 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_LINE_ACCOUNT , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+2], "00" , 2) == 0));
}
BOOL APPMSG::IsValidToAccountType(int iOffset) // Tipo de Cta valido ?
{
return ( (memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SPECIAL_ACCOUNT_AFJP , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT_BOND , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT_BOND, 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_LINE_ACCOUNT , 2) == 0) ||
// "02" : Caso especial RED LINK para operaciones en moneda US$, DOLARES
// No es estandard, como ya es constumbre, y viola el estandard
(memcmp((PBYTE)&chMsg[iOffset+4], "02" , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+4], "00" , 2) == 0));
}
EXPORT BOOL APPMSG::IsATMWithdrawal(void) // Extraccion
{
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
int iOffset = FieldOffset(3);
// Message-Type-Identifier [12..15=4]
return( ((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL_REP, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_ADV, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_ADV_REP, 4) == 0) )
&&
// UserTrxCode [xxyyzz=6] : xx=trx_code,yy=from_acct_type,zz=to_acct_type
( (memcmp((PBYTE)&chMsg[iOffset], "01", 2) == 0)
&& IsValidFromAccountType( iOffset )
&& IsValidToAccountType( iOffset )
)
);
}
EXPORT BOOL APPMSG::IsATMBalanceInquiry(void) // Consulta de saldos
{
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
int iOffset = FieldOffset(3);
// Message-Type-Identifier [12..15=4]
return( (memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0)
&&
// UserTrxCode [xxyyzz=6] : xx=trx_code,yy=from_acct_type,zz=to_acct_type
( (memcmp((PBYTE)&chMsg[iOffset], "31", 2) == 0 ||
memcmp((PBYTE)&chMsg[iOffset], "73", 2) == 0)
&& IsValidFromAccountType( iOffset )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -