예제 #1
0
파일: comroutines.c 프로젝트: kablin/skd
int CardReaded(char *Card,unsigned char com)
{
	time_t x=0;
	time(&x);
    char Enter = 0;
    char* Direction="0";


 /*   char * s=malloc(100*sizeof(char));
    		sprintf(s,"%d  ",com);
    		puts(s);
    		free (s);*/




    if (com==2)
	{
		Enter = 1;
		Direction="1";
	}

    char* Access=FindCard(Card);
    // Доступ разрешен
    if((atoi(Access)==1) &&( ((TripodIsOpenin ==0)&&(TripodIsOpenout ==0))|| ((TripodIsOpenin ==1)&&(Enter==1))||(((TripodIsOpenout ==1)&&(Enter==0)))))
    {
    	Log("Access OK");
        pthread_kill(Closetrip,SIGUSR2);
    	OpenTripod(Enter);
    }
    else if (atoi(Access)==1)
    {
    	Log("Turniket is busy");
    	WriteLogDb("Turniket is busy");
	}
    // Даоступ запрещен
    else if (atoi(Access)==0)
    {
    	Log("NO Access");
    	CloseTripod(Enter);
	}
	// Неизвестная карта
	else
	{
		 Log("Unknown CARD");
		 WriteLogDb("Unknown CARD");
	  	 CloseTripod(Enter);
	}
	WriteEntranceLogDb((char*)Card,Direction,Access);
    return 0;
}
예제 #2
0
void ExRecord::OnBnClickedSubmit()
{
	// TODO: 在此添加控件通知处理程序代码
	Records record = NULL;
	record = (Records)malloc(sizeof(Record));
	record->record_info = NULL;
	CString info,money_num,from,to;
	int from_n,to_n;

	record->type = exchange;
	GetDlgItemText(EX_COMBOX_FROM,from);
	GetDlgItemText(EX_COMBOX_TO,to);
	from_n = FindCard(from);
	to_n = FindCard(to);
	GetDlgItemText(EX_MONEY_NUM,money_num);
	if (FALSE == IsFloat(money_num,IN_MONEY_NUM))
	{
		MessageBox("输入的金额格式有误,请检查","错误");
		free(record);
		return;
	}

	if ("" == money_num)
	{
		MessageBox("输入的金额不可为 0 ","错误");
		free(record);
		return;		
	}
	record->money_num = atof(money_num);
	record->record_info = new CString();
	record->record_info->Format("#%s#%s#%d#%d",from,to,from_n,to_n);
	record->next = NULL;
	HWND hwnd = ::GetParent(m_hWnd);
	::SendMessage(hwnd,WM_MyMessage1,0,(LPARAM)record);
	EndDialog(0);
}
예제 #3
0
파일: Hand.cpp 프로젝트: ToStand/HandForce
std::vector<Card> Hand::Straight()
{
    std::vector<Card> sortedHand = Sorted();
    std::vector<Card> cards;

    if(sortedHand.size() == 5)
        if(StraightBetween(sortedHand, 0, 5))
        {
            cards.push_back(sortedHand[0]);
            cards.push_back(sortedHand[1]);
            cards.push_back(sortedHand[2]);
            cards.push_back(sortedHand[3]);
            cards.push_back(sortedHand[4]);
        }

    if(sortedHand.size() == 6)
        if(StraightBetween(sortedHand, 1, 6))
            if(cards.size())
                cards.push_back(sortedHand[5]);
            else
            {
                cards.push_back(sortedHand[1]);
                cards.push_back(sortedHand[2]);
                cards.push_back(sortedHand[3]);
                cards.push_back(sortedHand[4]);
                cards.push_back(sortedHand[5]);
            }

    if(sortedHand.size() == 7)
        if(StraightBetween(sortedHand, 2, 7))
            if(cards.size())
            {
                cards.push_back(sortedHand[6]);
                if(!FindCard(sortedHand[5], cards))
                    cards.push_back(sortedHand[5]);
            }
            else
            {
                cards.push_back(sortedHand[2]);
                cards.push_back(sortedHand[3]);
                cards.push_back(sortedHand[4]);
                cards.push_back(sortedHand[5]);
                cards.push_back(sortedHand[6]);
            }

    return cards;
}
예제 #4
0
void TableMonthIn::OnCbnSelchangeCombox()
{
	// TODO: 在此添加控件通知处理程序代码
    CString str;
  //if the control is the EditBox 


        //get the text from the EditBox

    GetDlgItemText(COMBOX,str);

        //set the value in the listContorl with the

        //specified Item & SubItem values

    SetCell(::GetDlgItem (m_hWnd,TABLE_LIST),str,nItem,nSubItem);
	::SendDlgItemMessage(m_hWnd,COMBOX,WM_KILLFOCUS,0,0);
    ::ShowWindow(::GetDlgItem(m_hWnd,COMBOX),SW_HIDE);

	int day;
	HWND hWnd1 =  ::GetDlgItem (m_hWnd,TABLE_LIST);
	day = (int)atof(GetItemText(hWnd1,nItem ,4));
	CString money;
	if ("现金" == str)
	{
		money.Format("%.1lf",month_p->day_records[day-1]->get_day_money_in_cash());
	}
	else if ("银行卡(总)" == str)
	{
		money.Format("%.1lf",month_p->day_records[day-1]->get_day_money_in_card());
	}
	else if ("全部" == str)
	{
		money.Format("%.1lf",month_p->day_records[day-1]->get_day_money_in_cash() + month_p->day_records[day-1]->get_day_money_in_card());
	}
	else
	{
		money.Format("%.1lf",month_p->day_records[day-1]->get_day_money_in_cards(FindCard(str)));
	}
	SetCell(::GetDlgItem (m_hWnd,TABLE_LIST),money,nItem,2);
}
예제 #5
0
bool CJMYPassPay::Pay(string &field55, string &cardno, string &sw1sw2, const int money)
{
    if (-1 == m_fd)
    {
		PrintLog("Serial port was closed");
		sw1sw2 = PORT_NOT_OPEN;
        return false;
    }
    else if (0 >= money || money >= 100000)
    {
        PrintLog("金额应该大于零小于100000(分),当前为:%d(分)", money);
        return false;
    }

    timeval usec1;
    gettimeofday(&usec1, NULL);
    int readLen = 0;
    string cmd;
    static char temp[BUF_SIZE] = {0};

    //关天线
    cmd = "11 00";
	if (false == CloseAntenna(cmd))
	{
		sw1sw2 = CLOSE_ANTE_FAILE;
        PrintLog("关天线失败");
		return false;
	}

    //开天线
    cmd = "11 01";
    if (false == OpenAntenna(cmd))
	{
		sw1sw2 = OPEN_ANTE_FAILE;
        PrintLog("开天线失败");
		return false;
	}

    // 寻卡
    cmd = "2000";
    if (false == FindCard(cmd))
	{
		sw1sw2 = FIND_CARD_FAILE;
        PrintLog("寻卡线失败");
		return false;
	}

    // 复位
    cmd = "30";
    if (false == RestCard(cmd))
	{
		sw1sw2 = CARD_RESET_FAILE;
        PrintLog("复位失败");
		return false;
	}

    // 选择PSE 用支付系统目录方法进行应用选择
	string app_id_cmd;
    cmd = "31 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31";
    if (false == SelectPSE(cmd, app_id_cmd, sw1sw2))
	{
        // 如果IC卡上没有PSE 那么IC卡应该对PSE的选择(SELECT)命令回送状态字“6A82”
        // 如果PSE被锁定,IC卡应该回送状态字“6283”
        // 这两种情况都要转为列表方式选择
        if (sw1sw2 == NO_PSE || sw1sw2 == PSE_LOCK)
        {
            vector<string>::iterator iter = m_vecAppId.begin();
            for (int i = 0; i < m_vecAppId.size(); ++i)
            {
                string aid = m_vecAppId[i];
                SelectByAID(field55, cardno, sw1sw2, money, aid);
                if (sw1sw2 == SUCCESS_CODE)
                {
                    break;
                }
            }
            if (sw1sw2 != SUCCESS_CODE)
            {
                return false;
            }
            return true;
        }
        PrintLog("选择PSE失败");
		return false;
	}

    // 选应选择
	string gpo;
    if (false == SelectAppId(app_id_cmd, gpo, sw1sw2, money))
	{
		PrintLog("send cmd:%s failed", cmd.c_str());
        PrintLog("选择应用失败");
		return false;
	}

    // 应用初始化
    cmd = gpo;
    PrintLog("gpo:%s", gpo.c_str());
    memset(g_readBuff, 0, sizeof(g_readBuff));
	int read_len = 0;
	if(false == SendGpoCmd(cmd, sw1sw2))
	{
        PrintLog("发送gpo失败");
		return false;
	}

    // 读取应用数据
    if (false == ReadRecords(g_readBuff, g_readLen, sw1sw2))
	{
        PrintLog("读记录失败");
		return false;
	}

    // 处理限制 已经在读记录做了。
    // 1.失效日期检查
    // 2. 失效日期检查

    // 终端风险管理
    // 1. 新卡检查

    // 终端行为分析
    // 1.联机脱机决定

    // 交易结束


    Get55Filed(field55);
   
    // 读卡号
    //if (false == PayGetCardNo(cardno, sw1sw2))
    //{
    //    return false;
    //}
	
    timeval usec2;
    gettimeofday(&usec2, NULL);
    int msec = (usec2.tv_sec * 1000 + usec2.tv_usec/1000) - (usec1.tv_sec * 1000 +  usec1.tv_usec/1000);
	PrintLog("***********elapse=%.2f**********", msec/1000.0);

    sw1sw2 = SUCCESS_CODE;
    return true;
}
예제 #6
0
// 读卡号
bool CJMYPassPay::ReadCardNo(string &cardno, string &sw1sw2)
{
	string cmd;
    int readLen = 0;
    static char temp[BUF_SIZE] = {0};

    timeval usec1;
    gettimeofday(&usec1, NULL);
    //关天线
    cmd = "11 00";
    if (false == CloseAntenna(cmd))
    {
        sw1sw2 = CLOSE_ANTE_FAILE;
        return false;
    }

    //开天线
    cmd = "11 01";
    if (false == OpenAntenna(cmd))
    {
        sw1sw2 = OPEN_ANTE_FAILE;
        return false;
    }

	// 寻卡
    cmd = "2000";
    if (false == FindCard(cmd))
	{
        sw1sw2 = FIND_CARD_FAILE;
		return false;
	}

    // 复位
    cmd = "30";
    if (false == RestCard(cmd))
	{
        sw1sw2 = CARD_RESET_FAILE;
		return false;
	}

    // 选择PSE
	string app_id_cmd;
    cmd = "31 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31";
    if (false == SelectPSE(cmd, app_id_cmd, sw1sw2))
    {
        return false;
    }
   
    // 选应用ID
	string gpo;
    if (false == SelectAppId(app_id_cmd, gpo, sw1sw2))
	{
		return false;
	}
	
	// 读取卡号的命令
	cmd = "31 00 B2 01 0C";
    memset(g_readBuff, 0, sizeof(g_readBuff));
	if (false == WriteData(cmd))
	{
		PrintLog("Send cmd:%s failed!", cmd.c_str());
		return false;
	}

    GetReadRes();
    readLen = g_readLen;
    memset(temp, 0x00, sizeof(temp));
    for (int i = 0; i < readLen; i++)
    {
        sprintf(temp + i * 2, "%02X", g_readBuff[i]);
    }
	PrintLog("Send cmd:%s\n, recv:%s", cmd.c_str(), temp);

    string str_card = temp;
    int pos = str_card.find("5712");
    if (pos > 0)
    {
        cardno = str_card.substr(pos + 4,19);
    }
	PrintLog("cardno:%s", cardno.c_str());
    sw1sw2 = SUCCESS_CODE;

    timeval usec2;
    gettimeofday(&usec2, NULL);
    int msec = (usec2.tv_sec * 1000 + usec2.tv_usec/1000) - (usec1.tv_sec * 1000 +  usec1.tv_usec/1000);
    PrintLog("***********elapse=%.2f**********", msec/1000.0);
	return true;
}
예제 #7
0
bool CJMYPassPay::QueryBalance(string &balance, string &sw1sw2)
{
    int readLen = 0;
    string cmd;
    static char temp[BUF_SIZE] = {0};
	
    //关天线
    cmd = "11 00";
    if (false == CloseAntenna(cmd))
    {
        sw1sw2 = CLOSE_ANTE_FAILE;
        return false;
    }
    //开天线
    cmd = "11 01";
    if (false == OpenAntenna(cmd))
    {
        sw1sw2 = OPEN_ANTE_FAILE;
        return false;
    }
	// 寻卡
    cmd = "2000";
    if (false == FindCard(cmd))
	{
		return false;
	}
    // 复位
    cmd = "30";
    if (false == RestCard(cmd))
	{
		return false;
	}
    // 选择PSE
	string app_id_cmd;
    cmd = "31 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31";
    if (false == SelectPSE(cmd, app_id_cmd, sw1sw2))
    {
        return false;
    }
    // 选应用ID
	string gpo;
    if (false == SelectAppId(app_id_cmd, gpo, sw1sw2))
	{
		return false;
	}
	// 查询余额
	cmd = "31 80CA9F79";
    memset(g_readBuff, 0X00, sizeof(g_readBuff));
	if (false == WriteData(cmd))
	{
		PrintLog("send cmd:%s failed", cmd.c_str());
		return false;
	}

    GetReadRes();
    readLen = g_readLen;
	
    memset(temp, 0x00, sizeof(temp));
    for (int i = 0; i < readLen; i++)
    {
        sprintf(temp + i * 3, "%02X ", g_readBuff[i]);
    }
	PrintLog("send cmd:%s\n recv:%s", cmd.c_str(), temp);

	for (int i = 0; i < readLen; i++)
	{
		if (0X9F == g_readBuff[i] && 0X79 == g_readBuff[i+1])
		{
			int money_len = g_readBuff[i+2];
			
			int start = i + 3;
			memset(temp, 0x00, sizeof(temp));
			for (int j = 0; j < money_len; j++)
			{
				sprintf(temp + j * 2, "%02X ", g_readBuff[start++]);
			}
			balance = temp;
			break;
		}
	}
    sw1sw2 = SUCCESS_CODE;
	return true;
}