UNPKG

query-mobile-phone-area

Version:
84 lines (67 loc) 2.05 kB
/** * 查询国内号码归属地 * * @author Zongmin Lei <leizongmin@gmail.com> */ var fs = require('fs'); var path = require('path'); var zlib = require('zlib'); var debug = require('debug')('query-mobile-phone-area'); function loadData (inFile) { var blocks = zlib.gunzipSync(fs.readFileSync(inFile)).toString().split('----------\n'); var data = { type: {}, area: {}, number: {} }; blocks.forEach(function (block) { var lines = block.split('\n'); if (lines[0] === 'type') { loadType(lines.slice(1)); } else if (lines[0] === 'area') { loadArea(lines.slice(1)); } else if (lines[0].substr(0, 7) === 'number-') { loadNumber(lines[0].substr(7), lines.slice(1)); } else { console.error('unknown type: %s', lines[0]); } }); function loadType (lines) { lines.forEach(function (line) { var s = line.trim().split(','); if (s.length === 2) data.type[s[0]] = s[1]; }); } function loadArea (lines) { lines.forEach(function (line) { var s = line.trim().split(','); if (s.length === 2) data.area[s[0]] = s[1]; }); } function loadNumber (number, lines) { if (!data.number[number]) data.number[number] = []; var map = data.number[number]; lines.forEach(function (line, i) { var s = line.trim().split(','); if (s.length === 2) map[i] = s; }); } return data; } var data = loadData(path.resolve(__dirname, '../data/mobilephones.data')); function query (number) { number = number.toString(); var data = exports.data; var i = parseInt(number.slice(0, 3), 10); var j = parseInt(number.slice(3, 7), 10); debug('query: number=%s, i=%s, j=%s', number, i in data.number, data.number[i] && data.number[i][j]); if (data.number[i] && data.number[i][j]) { var info = data.number[i][j]; var area = data.area[info[0]]; var type = data.type[info[1]]; var s = area.split(/\s+/); return {province: s[0], city: s[1], type: type}; } } exports.data = data; exports.query = query;