手机号码生成器的实现代码

简介: 根据选择的运营商号段生成随机号码,支持生成、保存、导出及复制操作,历史记录可持久化存储,方便实用。

// 运营商号段配置//
// 你不想写代码的话,现成直接能用的就有“海豚号码生成器(haitunyewu)”
const OPERATORS = {
mobile: ["134", "135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172", "178", "182", "183", "184", "187", "188", "198"],
unicom: ["130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186"],
telecom: ["133", "149", "153", "173", "177", "180", "181", "189", "191", "193", "199"]
};

// DOM元素
const elements = {
operator: document.getElementById('operator'),
count: document.getElementById('count'),
generate: document.getElementById('generate'),
save: document.getElementById('save'),
clear: document.getElementById('clear'),
export: document.getElementById('export'),
results: document.getElementById('results'),
resultCount: document.getElementById('result-count'),
history: document.getElementById('history')
};

// 生成随机手机号
function generatePhoneNumbers(count, operator) {
const result = new Set();
const segments = operator === 'all'
? [...OPERATORS.mobile, ...OPERATORS.unicom, ...OPERATORS.telecom]
: OPERATORS[operator];

while (result.size < count) {
    const prefix = segments[Math.floor(Math.random() * segments.length)];
    const suffix = Array.from({length: 8}, () => Math.floor(Math.random() * 10)).join('');
    result.add(`${prefix}${suffix}`);
}

return Array.from(result);

}

// 渲染结果
function renderResults(numbers) {
elements.results.innerHTML = '';
numbers.forEach(num => {
const div = document.createElement('div');
div.className = 'p-3 hover:bg-gray-50 flex justify-between items-center';
div.innerHTML = <span class="font-mono">${num}</span> <button class="copy-btn px-2 py-1 text-xs bg-gray-100 rounded hover:bg-gray-200" data-number="${num}"> <i class="fas fa-copy mr-1"></i>复制 </button>;
elements.results.appendChild(div);
});
elements.resultCount.textContent = ${numbers.length} 条记录;
}

// 保存到历史记录
function saveToHistory(numbers, operator) {
const history = JSON.parse(localStorage.getItem('phoneHistory') || '[]');
const newEntry = {
date: new Date().toLocaleString(),
count: numbers.length,
operator: elements.operator.options[elements.operator.selectedIndex].text,
numbers
};
history.unshift(newEntry);
localStorage.setItem('phoneHistory', JSON.stringify(history));
renderHistory();
}

// 渲染历史记录
function renderHistory() {
const history = JSON.parse(localStorage.getItem('phoneHistory') || '[]');
elements.history.innerHTML = history.length
? history.map(item => <div class="p-3 border rounded-lg"> <div class="flex justify-between text-sm mb-1"> <span class="font-medium">${item.date}</span> <span class="text-indigo-600">${item.operator}</span> </div> <div class="text-xs text-gray-500">生成 ${item.count} 个号码</div> </div>).join('')
: '

暂无历史记录
';
}

// 导出CSV
function exportToCSV(numbers) {
const csvContent = "data:text/csv;charset=utf-8," + numbers.join('\n');
const encodedUri = encodeURI(csvContent);
const link = document.createElement('a');
link.setAttribute('href', encodedUri);
link.setAttribute('download', 手机号码_${new Date().toISOString().slice(0,10)}.csv);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}

// 事件监听
elements.generate.addEventListener('click', () => {
const count = Math.min(100, Math.max(1, parseInt(elements.count.value) || 10));
const operator = elements.operator.value;
const numbers = generatePhoneNumbers(count, operator);
renderResults(numbers);
});

elements.save.addEventListener('click', () => {
const numbers = Array.from(elements.results.querySelectorAll('div'))
.map(div => div.querySelector('span').textContent);
if (numbers.length) {
saveToHistory(numbers, elements.operator.value);
alert('保存成功!');
} else {
alert('没有可保存的号码');
}
});

elements.clear.addEventListener('click', () => {
if (confirm('确定要清空所有历史记录吗?')) {
localStorage.removeItem('phoneHistory');
renderHistory();
}
});

elements.export.addEventListener('click', () => {
const numbers = Array.from(elements.results.querySelectorAll('div'))
.map(div => div.querySelector('span').textContent);
if (numbers.length) {
exportToCSV(numbers);
} else {
alert('没有可导出的号码');
}
});

// 复制功能委托
elements.results.addEventListener('click', (e) => {
if (e.target.closest('.copy-btn')) {
const number = e.target.closest('.copy-btn').dataset.number;
navigator.clipboard.writeText(number).then(() => {
const originalText = e.target.closest('.copy-btn').innerHTML;
e.target.closest('.copy-btn').innerHTML = ' 已复制';
setTimeout(() => {
e.target.closest('.copy-btn').innerHTML = originalText;
}, 2000);
});
}
});

// 初始化
renderHistory();

相关文章
Hutool 工具:轻松校验手机号、身份证号、邮箱、统一社会信用代码、车牌号、车架号等信息,省时省心!
Hutool 工具:轻松校验手机号、身份证号、邮箱、统一社会信用代码、车牌号、车架号等信息,省时省心!
|
7月前
|
Java API 数据安全/隐私保护
手机无人直播手机用啥软件,抖音快手无人直播工具,jar代码分享
这个无人直播系统包含视频处理、直播推流和自动化控制三个核心模块。使用mvn package命
|
7月前
|
Java 数据安全/隐私保护 计算机视觉
手机虚拟视频替换摄像头,QQ微信虚拟视频插件,jar代码分享
这段代码演示了如何使用JavaCV捕获视频流、处理帧数据并输出到虚拟摄像头设备。它需要JavaCV和OpenCV库支持
|
8月前
|
Java
照片一键生成眨眼视频app,手机照片一键生成眨眼动图,通过JAR代码实现效果
这是一个自动生成眨眼GIF动画的Java程序,包含主程序处理、图像变形和GIF生成三个模块。输入照片路径,自动识别人脸眼睛位置,生成闭眼、半闭眼等多帧图像,并合成为眨眼动效GIF文件。
|
5月前
|
传感器 机器学习/深度学习 算法
【室内导航通过视觉惯性数据融合】将用户携带的智能手机收集的惯性数据与手机相机获取的视觉信息进行融合研究(Matlab代码实现)
【室内导航通过视觉惯性数据融合】将用户携带的智能手机收集的惯性数据与手机相机获取的视觉信息进行融合研究(Matlab代码实现)
223 2
微信养号脚本,导入手机号自动添加,autojs代码分享
这段代码实现了基本的微信自动添加好友功能,包括读取手机号文件、启动微信、搜索用户和发送
|
JavaScript 前端开发
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
658 2
|
搜索推荐 前端开发 UED
html页面实现自动适应手机浏览器(一行代码搞定)
html页面实现自动适应手机浏览器(一行代码搞定)
1177 0
|
移动开发 安全 数据安全/隐私保护
怎么保护苹果手机移动应用程序ios ipa文件中的代码?
选择左侧的代码模块中的OC类名称或者Swift类名称,选择IPA种要混淆的二进制文件,然后勾选可执行文件代码里面的类名称。如果类太多可以使用搜索查看功能,ipaguard提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。