/** * GUID生成算法 * * 前10位为时间戳,精确到0.001s * 11-14位为机器名称(也可用ip)和 当前进程号做crc16编码 * 15-17位为随机数 * 18-20位为计数器 * * @author luorenbin */ function guid() { static $cal = 0; //计数器+1 $cal++; $cal >= 4096 ? $cal = 1 : ''; //毫秒保证时间的唯一 $time_dec = 1259510400000.0; $micro = microtime(true) * 1000; $micro = $micro - $time_dec; $time = substr($micro, 0, 13); $time_str = dechex($time); //获取机器名称 $dec1 = crc16(gethostname()); //获取进程号 $dec2 = posix_getpid(); $proc_str = dechex($dec1 + $dec2); $proc_str = substr($proc_str, -4); //生成随机数2位 $rand = dechex(mt_rand(0, 4095)); //计数器3位 $cal_str = dechex($cal); return sprintf('%010s%04s%03s%03s', $time_str, $proc_str, $rand, $cal_str); }
/** * loads user data for template processing * * @return void */ public function loadAllUserData() { $userdata = array(); $alluserdata = zb_UserGetAllStargazerData(); $tariffspeeds = zb_TariffGetAllSpeeds(); $tariffprices = zb_TariffGetPricesAll(); $multinetdata = zb_MultinetGetAllData(); $allcontracts = zb_UserGetAllContracts(); $allcontracts = array_flip($allcontracts); $contractDates = $this->getContractDatesAll(); $allphonedata = zb_UserGetAllPhoneData(); $allrealnames = zb_UserGetAllRealnames(); $alladdress = zb_AddressGetFulladdresslist(); $allemails = zb_UserGetAllEmails(); $allnasdata = zb_NasGetAllData(); $allcfdata = cf_FieldsGetAll(); $allpdata = zb_UserPassportDataGetAll(); $curdate = curdate(); $lastDocId = $this->getDocumentLastId(); $newDocId = $lastDocId + 1; if ($this->altcfg['OPENPAYZ_REALID']) { $allopcustomers = zb_TemplateGetAllOPCustomers(); } if (!empty($alluserdata)) { foreach ($alluserdata as $io => $eachuser) { $userdata[$eachuser['login']]['LOGIN'] = $eachuser['login']; $userdata[$eachuser['login']]['PASSWORD'] = $eachuser['Password']; $userdata[$eachuser['login']]['USERHASH'] = crc16($eachuser['login']); $userdata[$eachuser['login']]['TARIFF'] = $eachuser['Tariff']; @($userdata[$eachuser['login']]['TARIFFPRICE'] = $tariffprices[$eachuser['Tariff']]); $userdata[$eachuser['login']]['CASH'] = $eachuser['Cash']; $userdata[$eachuser['login']]['CREDIT'] = $eachuser['Credit']; $userdata[$eachuser['login']]['DOWN'] = $eachuser['Down']; $userdata[$eachuser['login']]['PASSIVE'] = $eachuser['Passive']; $userdata[$eachuser['login']]['AO'] = $eachuser['AlwaysOnline']; @($userdata[$eachuser['login']]['CONTRACT'] = $allcontracts[$eachuser['login']]); @($userdata[$eachuser['login']]['CONTRACTDATE'] = $contractDates[$eachuser['login']]['contractdate']); @($userdata[$eachuser['login']]['REALNAME'] = $allrealnames[$eachuser['login']]); @($userdata[$eachuser['login']]['ADDRESS'] = $alladdress[$eachuser['login']]); @($userdata[$eachuser['login']]['EMAIL'] = $allemails[$eachuser['login']]); @($userdata[$eachuser['login']]['PHONE'] = $allphonedata[$eachuser['login']]['phone']); @($userdata[$eachuser['login']]['MOBILE'] = $allphonedata[$eachuser['login']]['mobile']); //openpayz payment ID if ($this->altcfg['OPENPAYZ_REALID']) { @($userdata[$eachuser['login']]['PAYID'] = $allopcustomers[$eachuser['login']]); } else { @($userdata[$eachuser['login']]['PAYID'] = ip2int($eachuser['IP'])); } //traffic params $userdata[$eachuser['login']]['TRAFFIC'] = $eachuser['D0'] + $eachuser['U0']; $userdata[$eachuser['login']]['TRAFFICDOWN'] = $eachuser['D0']; $userdata[$eachuser['login']]['TRAFFICUP'] = $eachuser['U0']; //net params @($userdata[$eachuser['login']]['IP'] = $eachuser['IP']); @($userdata[$eachuser['login']]['MAC'] = $multinetdata[$eachuser['IP']]['mac']); @($userdata[$eachuser['login']]['NETID'] = $multinetdata[$eachuser['IP']]['netid']); @($userdata[$eachuser['login']]['HOSTID'] = $multinetdata[$eachuser['IP']]['id']); //nas data @($usernas = zb_NasGetParams($multinetdata[$eachuser['IP']]['netid'], $allnasdata)); @($userdata[$eachuser['login']]['NASID'] = $usernas['id']); @($userdata[$eachuser['login']]['NASIP'] = $usernas['nasip']); @($userdata[$eachuser['login']]['NASNAME'] = $usernas['nasname']); @($userdata[$eachuser['login']]['NASTYPE'] = $usernas['nastype']); if (isset($tariffspeeds[$eachuser['Tariff']])) { $userdata[$eachuser['login']]['SPEEDDOWN'] = $tariffspeeds[$eachuser['Tariff']]['speeddown']; $userdata[$eachuser['login']]['SPEEDUP'] = $tariffspeeds[$eachuser['Tariff']]['speedup']; } else { //if no tariff speed defined zero speed by default $userdata[$eachuser['login']]['SPEEDDOWN'] = 0; $userdata[$eachuser['login']]['SPEEDUP'] = 0; } //passport data @($userdata[$eachuser['login']]['PBIRTH'] = $allpdata[$eachuser['login']]['birthdate']); @($userdata[$eachuser['login']]['PNUM'] = $allpdata[$eachuser['login']]['passportnum']); @($userdata[$eachuser['login']]['PDATE'] = $allpdata[$eachuser['login']]['passportdate']); @($userdata[$eachuser['login']]['PWHO'] = $allpdata[$eachuser['login']]['passportwho']); @($userdata[$eachuser['login']]['PCITY'] = $allpdata[$eachuser['login']]['pcity']); @($userdata[$eachuser['login']]['PSTREET'] = $allpdata[$eachuser['login']]['pstreet']); @($userdata[$eachuser['login']]['PBUILD'] = $allpdata[$eachuser['login']]['pbuild']); @($userdata[$eachuser['login']]['PAPT'] = $allpdata[$eachuser['login']]['papt']); //other document data @($userdata[$eachuser['login']]['CURDATE'] = $curdate); @($userdata[$eachuser['login']]['DOCID'] = $newDocId); } } $this->userData = $userdata; }
{ //"CRC16_CCITT_FALSE" $crc = 0xffff; for ($i = 0; $i < strlen($data); ++$i) { $x = ($crc >> 8 ^ ord($data[$i])) & 0xff; $x ^= $x >> 4; $crc = ($crc << 8 ^ $x << 12 ^ $x << 5 ^ $x) & 0xffff; } return $crc; } if (isset($_GET["code"])) { $hashchars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ?!"; //remove "bad" characters from the given code: $code = preg_replace("/[^_\\-\\/\\a-z0-9]/i", "", $_GET["code"]); //append code's crc16 to the code $crc = crc16($code); $code .= $hashchars[$crc & 0x3f]; $code .= $hashchars[($crc & 0xfc0) >> 6]; $code .= $hashchars[($crc & 0xf000) >> 12]; //break the code into pieces of 6 chars //and calculate the checksum character for each piece $len = strlen($code); $new_code = ""; for ($i = 0; $i < $len; $i += 6) { $bits = 0x2a; for ($j = 0; $j < 6 && $i + $j < $len; ++$j) { $byte = ord($code[$i + $j]); $bits = $bits ^ $byte; $new_code .= $code[$i + $j]; } $new_code .= $hashchars[$bits % 64] . " ";
function decode_PICC_byte($data) { static $crc, $packet; global $time; if ($data < 0) { if ($packet) { printf("PICC: packet=%s (%u) CRC=%s:[0x%04X]\n\n", strtoupper(bin2hex($packet)), strlen($packet), strlen($packet) > 2 ? $crc == 0xc316 ? 'OK' : 'FAILED' : 'NONE', $crc); } $packet = ''; $crc = 0xffff; } else { $packet .= pack('C', $data); $crc = crc16($data, $crc); // printf("PICC: data=0x%02X crc=0x%04X\n",$data,$crc); } }
/** * Returns all data about current userbase * which used for templatizing functions * * @return array */ function zb_TemplateGetAllUserData() { $altcfg = rcms_parse_ini_file(CONFIG_PATH . "alter.ini"); $userdata = array(); $alluserdata = zb_UserGetAllStargazerData(); $tariffspeeds = zb_TariffGetAllSpeeds(); $tariffprices = zb_TariffGetPricesAll(); $multinetdata = zb_MultinetGetAllData(); $allcontracts = zb_UserGetAllContracts(); $allcontracts = array_flip($allcontracts); $allrealnames = zb_UserGetAllRealnames(); $alladdress = zb_AddressGetFulladdresslist(); $allemails = zb_UserGetAllEmails(); $allnasdata = zb_NasGetAllData(); $allcfdata = cf_FieldsGetAll(); $allpdata = zb_UserPassportDataGetAll(); if ($altcfg['OPENPAYZ_REALID']) { $allopcustomers = zb_TemplateGetAllOPCustomers(); } if (!empty($alluserdata)) { foreach ($alluserdata as $io => $eachuser) { $userdata[$eachuser['login']]['login'] = $eachuser['login']; $userdata[$eachuser['login']]['password'] = $eachuser['Password']; $userdata[$eachuser['login']]['userhash'] = crc16($eachuser['login']); $userdata[$eachuser['login']]['tariff'] = $eachuser['Tariff']; @($userdata[$eachuser['login']]['tariffprice'] = $tariffprices[$eachuser['Tariff']]); $userdata[$eachuser['login']]['cash'] = $eachuser['Cash']; $userdata[$eachuser['login']]['credit'] = $eachuser['Credit']; $userdata[$eachuser['login']]['down'] = $eachuser['Down']; $userdata[$eachuser['login']]['passive'] = $eachuser['Passive']; $userdata[$eachuser['login']]['ao'] = $eachuser['AlwaysOnline']; @($userdata[$eachuser['login']]['contract'] = $allcontracts[$eachuser['login']]); @($userdata[$eachuser['login']]['realname'] = $allrealnames[$eachuser['login']]); @($userdata[$eachuser['login']]['address'] = $alladdress[$eachuser['login']]); @($userdata[$eachuser['login']]['email'] = $allemails[$eachuser['login']]); //openpayz payment ID if ($altcfg['OPENPAYZ_REALID']) { @($userdata[$eachuser['login']]['payid'] = $allopcustomers[$eachuser['login']]); } else { @($userdata[$eachuser['login']]['payid'] = ip2int($eachuser['IP'])); } //traffic params $userdata[$eachuser['login']]['traffic'] = $eachuser['D0'] + $eachuser['U0']; $userdata[$eachuser['login']]['trafficdown'] = $eachuser['D0']; $userdata[$eachuser['login']]['trafficup'] = $eachuser['U0']; //net params $userdata[$eachuser['login']]['ip'] = $eachuser['IP']; @($userdata[$eachuser['login']]['mac'] = $multinetdata[$eachuser['IP']]['mac']); @($userdata[$eachuser['login']]['netid'] = $multinetdata[$eachuser['IP']]['netid']); @($userdata[$eachuser['login']]['hostid'] = $multinetdata[$eachuser['IP']]['id']); //nas data @($usernas = zb_NasGetParams($multinetdata[$eachuser['IP']]['netid'], $allnasdata)); @($userdata[$eachuser['login']]['nasid'] = $usernas['id']); @($userdata[$eachuser['login']]['nasip'] = $usernas['nasip']); @($userdata[$eachuser['login']]['nasname'] = $usernas['nasname']); @($userdata[$eachuser['login']]['nastype'] = $usernas['nastype']); if (isset($tariffspeeds[$eachuser['Tariff']])) { $userdata[$eachuser['login']]['speeddown'] = $tariffspeeds[$eachuser['Tariff']]['speeddown']; $userdata[$eachuser['login']]['speedup'] = $tariffspeeds[$eachuser['Tariff']]['speedup']; } else { //if no tariff speed defined zero speed by default $userdata[$eachuser['login']]['speeddown'] = 0; $userdata[$eachuser['login']]['speedup'] = 0; } //CF data $usercfdata = zb_cfGetContent($eachuser['login'], $allcfdata); if (!empty($usercfdata)) { foreach ($usercfdata as $cd => $eachcf) { $userdata[$eachuser['login']]['cf'][$cd] = $eachcf; } } //passport data @($userdata[$eachuser['login']]['birthdate'] = $allpdata[$eachuser['login']]['birthdate']); @($userdata[$eachuser['login']]['passportnum'] = $allpdata[$eachuser['login']]['passportnum']); @($userdata[$eachuser['login']]['passportdate'] = $allpdata[$eachuser['login']]['passportdate']); @($userdata[$eachuser['login']]['passportwho'] = $allpdata[$eachuser['login']]['passportwho']); @($userdata[$eachuser['login']]['pcity'] = $allpdata[$eachuser['login']]['pcity']); @($userdata[$eachuser['login']]['pstreet'] = $allpdata[$eachuser['login']]['pstreet']); @($userdata[$eachuser['login']]['pbuild'] = $allpdata[$eachuser['login']]['pbuild']); @($userdata[$eachuser['login']]['papt'] = $allpdata[$eachuser['login']]['papt']); } } return $userdata; }
# $pi_id - ID пользователя (по версии биллинга) (число) # $pmas_mac[$pi_id][n] - MAC-адрес номер n.... для IP-адреса n.... , т.е. $pmas_mac[$pi_id][1] - это MAC-адрес для IP-адреса $pmas_ip[$pi_id][1] #================================================================================================================ */ //Если в биллинге хранится обширная статистика, то тогда не имеет смысла обрабатывать её всю. //Достаточно обрабатывать не более 5 суток для получения актуальных данных //Если скрипт работает постоянно - то этой информации избыточно printlog("формируем из БД биллинга массив с пользователями"); $ps_constr = "SELECT * from `users`"; printlog_sql($ps_constr); $rs = sqa($conn1, $ps_constr); $pi1 = 0; if (!empty($rs)) { foreach ($rs as $io => $eachuser) { $pi1++; $userid = crc16($eachuser['login']); $pmas5[$pi1][1] = $userid; $pmas5[$pi1][2] = $eachuser['Tariff']; $pmas5[$pi1][3] = $eachuser['login']; $pmas5[$pi1][4] = 1; @($pmas5[$pi1][5] = $allcontracts[$eachuser['login']]); @($pmas5[$pi1][6] = $allregs[$eachuser['login']]); @($pmas5[$pi1][7] = enccorr($allrealnames[$eachuser['login']])); @($pmas5[$pi1][8] = enccorr($allnotes[$eachuser['login']])); $pmas5[$pi1][9] = $eachuser['Cash']; $pmas5[$pi1][10] = $eachuser['Down']; @($pmas5[$pi1][11] = $allregs[$eachuser['login']]); $pmas5[$pi1][12] = $eachuser['D0']; $pmas5[$pi1][13] = $eachuser['U0']; $pmas5[$pi1][14] = date("Y-m-d H:i:s", $eachuser['LastActivityTime']); @($pmas5[$pi1][18] = enccorr($alladdress[$eachuser['login']]['apt']));