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

📄 devicebase03.cpp

📁 shuibiao danpianji chengxu
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		//清卡
		for(i=0;i<50;i++) wrbuff[i]=0x00;
        errno=wr_dat(1,7,wrbuff);
        if (errno!=0) return errcase(errno);

		//校验
        errno=rd_dat(1,7,rdbuff);
        if (errno!=0) return 1;

        for(i=0;i<28;i++)
        {
            if(rdbuff[i]!=0x00)  return 1;
        }
        return 0;
}

//制作发行卡/检测卡
int CDeviceBase03::DKxZfxk (long KnID,     //用户ID号
                            long yhmm,     //用户密码
                            struct FXCZSJ * fxczsj  //发行卡表数据
							)
{
        BYTE zhuanzf[10],nCheckNum,fxmode;
        int i,errno,zhuansz,fxsj[4];

        if(testview)
		{
		    char xxinfo[200];
			wsprintf(xxinfo,"ID=%X\nyhmm=%ld\ndbjz=%ld\nqbjz=%ld\nsb1jz=%ld\nsb2jz=%ld\n"
	                    ,KnID,yhmm,fxczsj->dbjz,fxczsj->qbjz,fxczsj->sb1jz,fxczsj->sb2jz);    
            MessageBox(NULL,xxinfo,"写入数据显示窗口",0); 
		}

        if(resrand==1)
        {
            resrand=0;
            srand((unsigned)time(NULL));
        }

		//用户密码加密运算
        zhuansz=m_YhmmCoding(yhmm);
        zhuansz^=0xE52A7002;
        zhuansz^=faxingmm;
        numtostr(&zhuansz,zhuanzf);

		//准备写卡数据
        for(i=0;i<50;i++) wrbuff[i]=0x00;

		//用随机数填充卡数据区(不含1,7区)
        for(i=4;i<24;i++) wrbuff[i]=rand()%256;

        fxsj[0]=fxczsj->qbjz;
        fxsj[1]=fxczsj->dbjz;
        fxsj[2]=fxczsj->sb1jz;
        fxsj[3]=fxczsj->sb2jz;

		strznum.numzh=fxczsj->fxmode;
		fxmode=strznum.strzh[0];

		errno=0;
        for(i=0;i<4;i++)
        {
            if(fxsj[i]>=0)
            {
				if(fxsj[i]>0xFFFF) return 2;

				wrbuff[i]=(fxmode==0x00) ? 0xF1 : 0xF8;
                wrbuff[i*2+4]=fxsj[i]%256;
                wrbuff[i*2+5]=(fxsj[i]/256)%256;
				errno++;
            }
        }

		if(errno==0) return 2;	//没有表要发行

        //参与用户密码计算的4字节
        wrbuff[22]=zhuanzf[0];
        wrbuff[19]=zhuanzf[1];
        wrbuff[16]=zhuanzf[2];
        wrbuff[13]=zhuanzf[3];

		//用户ID号
        strznum.numzh=KnID;
        wrbuff[12]= strznum.strzh[3];
        wrbuff[14]= strznum.strzh[2];
        wrbuff[15]= strznum.strzh[1];
        wrbuff[21]= strznum.strzh[0];

		for(i=0;i<4;i++)
		{
			//对于计时表,将对应的表基值改为0x0101
			if((nCurrDeviceNum[i]==430004001) && (wrbuff[i]==0xF1))
			{
				//月份初始化为 0年1月1日
                wrbuff[i*2+4]=0x01;
                wrbuff[i*2+5]=0x01;
		        wrbuff[20]=0;
			}
		}

        //计算校验和
		nCheckNum=0;
        for(i=0;i<23;i++)
        {
            nCheckNum+=wrbuff[i];
        }
        wrbuff[23]=nCheckNum;
        
		zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
}

//制做空白消费卡
int CDeviceBase03::DKxFsxk(long KnID,long yhmm)
{
        BYTE zhuanzf[10];
        int i,errno,zhuansz;

        if(testview)
		{
			char xxinfo[100];
	        wsprintf(xxinfo,"KnID=%ld,mima=%ld",KnID,yhmm);    
            MessageBox( NULL,xxinfo,"写入数据显示窗口",0); 
		}

		//准备写卡数据
		wrbuff[0]=0x13;
        wrbuff[1]=0x13;
        wrbuff[2]=0x13;
        wrbuff[3]=0x13;
        for(i=4;i<50;i++) wrbuff[i]=0x00;

        zhuansz=m_YhmmCoding(yhmm);
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
}

//制做检查卡
int CDeviceBase03::DKxZjck (long KnID)
{
        BYTE zhuanzf[10];
        int i,errno,zhuansz;
        
        if(testview)
		{
	        char xxinfo[100];
			wsprintf(xxinfo,"KnID=%ld",KnID);
            MessageBox( NULL,xxinfo,"写入数据显示窗口",0); 
		}

		//准备写卡数据
        wrbuff[0]=0xF4;
        wrbuff[1]=0x0F;
        wrbuff[2]=0x00;
        wrbuff[3]=0x03;
	    for(i=4;i<50;i++) wrbuff[i]=0x00;

        zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
}

//制作功能卡
int CDeviceBase03::DKxZjckEx (long KnCs)
{
        BYTE zhuanzf[10];
        int i,errno,zhuansz;

        if(testview)
		{
	        char xxinfo[100];
	        wsprintf(xxinfo,"KnCs=%4X",KnCs);    
            MessageBox( NULL,xxinfo,"写入数据显示窗口",0); 
		}

		strznum.numzh=KnCs;
		if((strznum.strzh[2]!=0) || (strznum.strzh[3]!=0)) return 2;

		//准备数据
		wrbuff[0]=0xF4;
        wrbuff[1]=strznum.strzh[1];
        wrbuff[2]=strznum.strzh[0];
        wrbuff[3]=wrbuff[0]+wrbuff[1]+wrbuff[2];
        for(i=4;i<50;i++) wrbuff[i]=0x00;

		zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
}

//制作单显水表补偿卡
int CDeviceBase03::DKxZbck(struct CZBCSJ * buchang)
{
		return 1;
/*
		BYTE zhuanzf[10],CheckNum;
        BYTE rdbuff[100],wrbuff[100];
        int i,errno,zhuansz;

        if(testview)
		{
		    char xxinfo[100];
		    wsprintf(xxinfo,"buchang=%ld",buchang->bcz);    
            MessageBox( NULL,xxinfo,"写入数据显示窗口",0); 
		}

		//准备写卡数据
        for(i=0;i<50;i++) wrbuff[i]=0;

        switch(buchang->blb)
        {
        case 0x1C:
                wrbuff[0]=0xF5;
                wrbuff[4]=0x1C;
                if(buchang->bcz<-5 || buchang->bcz>5)  return 2;

                wrbuff[0]=0xF5;
                wrbuff[4]=buchang->blb%256;
                wrbuff[5]=0x0C; //加、减数标志
                if (buchang->bcz<0)
                        wrbuff[5]=0x0A;         //负偏差需每隔n个数跳一个
                else if (buchang->bcz>0)
                        wrbuff[5]=0x0B;         //正偏差需每隔n个数停一个
                
                switch(buchang->bcz)
                {
                case -10:
                        wrbuff[6]=9;
                        break;
                case -9:
                        wrbuff[6]=10;
                        break;
                case -8:
                        wrbuff[6]=11;
                        break;
                case -7:
                        wrbuff[6]=13;
                        break;
                case -6:
                        wrbuff[6]=16;
                        break;
                case -5:
                        wrbuff[6]=19;
                        break;
                case -4:
                        wrbuff[6]=24;
                        break;
                case -3:
                        wrbuff[6]=32;
                        break;
                case -2:
                        wrbuff[6]=49;
                        break;
                case -1:
                        wrbuff[6]=99;
                        break;
                case 0:
                        wrbuff[6]=00;
                        break;
                case 1:
                        wrbuff[6]=101;
                        break;
                case 2:
                        wrbuff[6]=51;
                        break;
                case 3:
                        wrbuff[6]=34;
                        break;
                case 4:
                        wrbuff[6]=26;
                        break;
                case 5:
                        wrbuff[6]=21;
                        break;
                case 6:
                        wrbuff[6]=18;
                        break;
                case 7:
                        wrbuff[6]=15;
                        break;
                case 8:
                        wrbuff[6]=14;
                        break;
                case 9:
                        wrbuff[6]=12;
                        break;
                case 10:
                        wrbuff[6]=11;
                        break;
                        
                default:
                        wrbuff[6]=255;
                        break;
                }
                if (wrbuff[5]==0x0C)    //无需补偿
                        wrbuff[6]=20;
                break;
        }
        CheckNum=0x00;
        for (i=0;i<15;i++) CheckNum+=wrbuff[i];
        wrbuff[15]=CheckNum;

        zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
*/
}

//制作电表校验卡
int CDeviceBase03::DKxZjyk(struct CZJYSJ * jysj)
{
        BYTE zhuanzf[10],nCheckNum;
        int  i,errno,zhuansz;

		if(jysj->blb!=0x1B) return 2;		//表标志不符		
        if(jysj->fzcs<0 || (jysj->fzcs%256)>=60) return 2;		//超载常数
        if(jysj->jbqs<=0 || jysj->jbqs>255) return 2;		//基表常数
        if(jysj->jysl<0 || jysj->jysl>0xffffff) return 2;	//校检数量
        if(jysj->xscs<0 || jysj->xscs>65535) return 2;		//常显数量
		
		//准备数据
		for(i=0;i<50;i++) wrbuff[i]=0;

        wrbuff[0]=0xF6;
        wrbuff[4]=0x1B;

		strznum.numzh=jysj->xscs;
		wrbuff[5]=strznum.strzh[1];
        wrbuff[6]=strznum.strzh[0];
        
		strznum.numzh=jysj->jbqs;
		wrbuff[7]=strznum.strzh[0];

        strznum.numzh=jysj->fzcs;
		wrbuff[8]=strznum.strzh[0];
		if(strznum.strzh[1]) wrbuff[10]=0x10;	//10度报警关阀标志

        wrbuff[11]=0x30;

        strznum.numzh=jysj->jysl;
		wrbuff[12]=strznum.strzh[0];
        wrbuff[13]=strznum.strzh[1];
        wrbuff[14]=strznum.strzh[2];

        zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        for(i=0;i<4;i++) wrbuff[24+i]=zhuanzf[i];

        //计算校验和
		nCheckNum=0;
        for(i=0;i<15;i++) nCheckNum+=wrbuff[i];
        wrbuff[15]=nCheckNum;

		//将空卡新制成加密卡
		errno=makenewcard(wrbuff);
        return errno;
}

//读电表校验卡
int CDeviceBase03::DKxRdjyk(struct CZJYSJ * jysj)
{
        BYTE zhuanzf[10],nCheckNum;
        int i,errno,zhuansz;

		//设置为加密方式
        errno=Set_modecode(modejmzc);
        if(errno!=0) return errcase(errno);

        //告之卡密码
		zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
        errno=Set_pass(zhuanzf);
        if(errno!=0) return errcase(errno);
	
		//读卡	
        errno=rd_dat(1,7,rdbuff);
        if(errno!=0) return errcase(errno);

		Set_pass(mm_clear);
		Set_modecode(modezc);

		//校验卡密码
		if(*(unsigned int *)&rdbuff[24]!=*(unsigned int *)zhuanzf)
			return errcase(0x10);	//卡未加密

        //检查校验和
		nCheckNum=0;
        for(i=0;i<15;i++) nCheckNum+=rdbuff[i];
        if(rdbuff[15]!=nCheckNum) return(0x11);	//卡内没有有效的数据

		jysj->jbqs=rdbuff[7];
		jysj->fzcs=rdbuff[8];
		jysj->xscs=rdbuff[6]+rdbuff[5]*256;
		jysj->jysl=rdbuff[12]+rdbuff[13]*256;
		
		strznum.strzh[0]=rdbuff[4];		//表类别
		strznum.strzh[1]=rdbuff[10];	//10度报警关阀标志
		strznum.strzh[2]=rdbuff[14];	//校验控制
		strznum.strzh[3]=0x00;
		jysj->blb=strznum.numzh;

        return 0;
}

//清发行卡
int CDeviceBase03::DClear_fx()
{
        BYTE zhuanzf[10];
        int	zhuansz;

        zhuansz=faxingmm;
        numtostr(&zhuansz,zhuanzf);
	
		//将加密卡清空
		return(clearjmcard(zhuanzf));

⌨️ 快捷键说明

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