其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
一段IC卡写卡操作的源码(深圳达实公司用)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

int  __stdcall SetCardBalance_NN(HANDLE  icdev, long Money, LPCSTR UserPassword,UCHAR sector,unsigned long CardSN,unsigned long SetData)
{ //Money的值表示为多少分钱 ,  注意:  充钱可以充入负钱
 unsigned long  snr;
 UINT    BasicInfoSec;//基础信息扇区
 UCHAR   BlockData[16];
 UCHAR   UserCard_KeyB[6];
 union
 {
  UINT    time;//消费流水号
  UCHAR   ch[4];
 }ConsumeSN;
 union
 {
  unsigned long   Money;
  UCHAR  ch[4];
 }amount;//存放金额

 union
 {
  unsigned long   data;
  UCHAR  ch[4];
 }Wtdata;//写卡时间

…//验证用户密码
   
 BasicInfoSec=SI.sec_assigned.basicinfosec;//基础信息扇区

…判断所给定的扇区信息的正确性
….

…装载消费扇区密码
…装载基础扇区密码  

 SETTIMEOUT(WaitTime);//寻卡
 do
 {
  if(rf_card(icdev,ALL,&snr) == MI_OK) break;
  if(rf_halt(icdev)!=MI_OK) return Reader_Err; 
 }while(!TIMEOUT);
 if (TIMEOUT) return (No_Card);
 if(CardSN != snr) return NOT_SPECCARD_ERR;

    SetData=SetData&0x0000FFFF;

 if( SetData==0x0000){                            //手工充值
     …
   if (rf_write(icdev,sector*4+1,BlockData) != MI_OK) return(Writeblock1_Err);
   return  0 ;
 }
 else {
    // 自动充值开始
 ..只需验证KEY即可

 Wtdata.data=Wtdata.data&0x0000FFFF;
    if(Wtdata.data==0xFFFF)Wtdata.data=0x0000;
 if(SetData<=Wtdata.data) return -30;        //自动充值已经完成

    //新一轮的充值数据
 Wtdata.data = SetData;
 …准备写新的充值时间
 if (rf_write(icdev,BasicInfoSec*4+2,BlockData) != MI_OK) return(WriteCard_Err);

 SETTIMEOUT(WaitTime);//寻卡
 do
 {
  if(rf_card(icdev,ALL,&snr) == MI_OK) break;
  if(rf_halt(icdev)!=MI_OK) return Reader_Err; 
 }while(!TIMEOUT);
 if (TIMEOUT) return (No_Card);
 if(CardSN != snr) return NOT_SPECCARD_ERR;

 …需验证KEY可 
 …写充值数据
 return  0 ;
}

 




相关文章

相关软件