>> /*! \brief Extract the public data files from a SIS image and parse the content. >> * >> * This function will extract the two public files - the PBDF (Public Data File) and the >> * ISDF (Issuer Data File) - from the SIS image. PBDF and ISDF are parsed and the relevant >> * data fields are made available in 2 data structures, resp. of type Pbdf and Isdf. >> * >> * \param pucBuffer the buffer (SIS_LEN bytes) containing the SIS card image read >> * \param pxPbdf the resulting PBDF file >> * \param pxIsdf the resulting ISDF file >> * >> * \note dates are always in "YYYYMMDD" format >> * >> * \return ERR_OK if ok >> * \return ERR_PARAM if parameter error >> * \return ERR_BNCS if SIS parse error >> * \return ERR_INTERNAL if internal error >> * >> */ >>SISPUBLIC_API SisPublicError SisPublicParse(const unsigned char *pucBuffer, Pbdf *pxPbdf, Isdf *pxIsdf); >>>>
>#define SIS_LEN 404 >#define BCDDATE_LEN (8+1) >#define FIDN_LEN (4+1) >#define FSKI_LEN (2+1) >#define FCTF_LEN (8+1) >#define FCSM_LEN (2+1) >#define PBDF_NAME_LEN (48+1) >#define PBDF_SNME_LEN (24+1) >#define PBDF_SSIN_LEN (11+1) >#define PBDF_INIT_LEN (1+1) >#define PBDF_SEXE_LEN (1+1) >#define ISDF_SSIN_LEN PBDF_SSIN_LEN >#define ISDF_CNME_LEN (10+1) >#define ISDF_CLAN_LEN (1+1) >#define ISDF_CLGN_LEN (10+1) > >*! Public Data File >* >* >*typedef struct >*{ >*unsigned char FIDN[FIDN_LEN]; //!< File Identification Number(0012) 5 >*unsigned char FSKI[FSKI_LEN]; //!< File Secret Key Index 3 >*unsigned char SSIN[PBDF_SSIN_LEN]; //!< Social Security Identification Number 12 >*unsigned char DCDT[BCDDATE_LEN]; //!< Data Capture Date 9 >*unsigned char NAME[PBDF_NAME_LEN]; //!< Holder's Firstname 49 >*unsigned char SNME[PBDF_SNME_LEN]; //!< Holder's Surname 25 >*unsigned char INIT[PBDF_INIT_LEN]; //!< Holder's initial 2 >*unsigned char SEXE[PBDF_SEXE_LEN]; //!< Holder's Sex 2 >*unsigned char BRDT[BCDDATE_LEN]; //!< Holder's Birthdate 9 >*unsigned char FCTF[FCTF_LEN]; //!< File Certificate 9 >*unsigned char FCSM[FCSM_LEN]; //!< File Checksum 3 >*} Pbdf; ----- >* 128 >*! Issuer Data File >* >*/ >*typedef struct >*{ >*unsigned char FIDN[FIDN_LEN]; //!< File Identification Number >*unsigned char FSKI[FSKI_LEN]; //!< File Secret Key Index >*unsigned char SSIN[ISDF_SSIN_LEN]; //!< Social Security Identification Number >*unsigned char DCDT[BCDDATE_LEN]; //!< Data Capture Date >*unsigned char CNME[ISDF_CNME_LEN]; //!< Card Name >*unsigned char CLAN[ISDF_CLAN_LEN]; //!< Card Language >*unsigned char CLGN[ISDF_CLGN_LEN]; //!< Card Logical Number >*unsigned char CBDT[BCDDATE_LEN]; //!< Card Begin Date >*unsigned char CEDT[BCDDATE_LEN]; //!< Card End Date >*unsigned char FCTF[FCTF_LEN]; //!< File Certificate >*unsigned char FCSM[FCSM_LEN]; //!< File Checksum >*} Isdf; > >Try: ><pre> >DECLARE LONG SisPublicParse IN SisPublic.dll STRING @, STRING @, STRING @ >STORE REPLICATE(CHR(0), SIS_LEN) TO lcTest >STORE REPLICATE(CHR(0), 128) TO lcPbdf, lcIsdf >? SisPublicParse(@lcTest, @lcPbdf, @lcIsdf) >? lcTest >? lcPbdf >? lcIsdf >