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; }
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); }
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; }
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); }
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; }
// 读卡号 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; }
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; }