改良了一下QQ号码价值评估仅供娱乐
| 声明:优化使用了AI辅助 前段时间看直播,好多评估QQ号码的,人气还不错,有喜欢的可以自娱自乐一下。 1、添加了接口,可以查询QQ等级等信息 2、适配手机页面 3、食用方法:下载源码,保存成html,修改文档中的参数,搜索“你的QQ号”,替换里面的uni=你的QQ号、你的skey和你的p_skey,后面两个可以登陆vip.qq.com,用开发者模式查看,接口为免费接口,请勿滥用。 ![]() 复制代码保存html文件就行了 <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>QQ号码价值评估系统</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%); min-height: 100vh; padding: 15px; color: #fff; } .container { max-width: 800px; margin: 0 auto; background: rgba(255, 255, 255, 0.05); border-radius: 20px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1); padding: 25px; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); } h1 { color: #00d4ff; text-align: center; margin-bottom: 25px; font-size: 24px; font-weight: 600; text-shadow: 0 0 20px rgba(0, 212, 255, 0.3); } h1:after { content: ""; display: block; width: 80px; height: 2px; background: linear-gradient(90deg, transparent, #00d4ff, transparent); margin: 10px auto; } .search-box { display: flex; gap: 10px; margin-bottom: 25px; } #qq-input { flex: 1; padding: 14px 18px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 12px; font-size: 16px; outline: none; background: rgba(255, 255, 255, 0.05); color: #fff; } #qq-input:focus { border-color: #00d4ff; box-shadow: 0 0 15px rgba(0, 212, 255, 0.3); } #qq-input::placeholder { color: rgba(255, 255, 255, 0.4); } #search-btn { padding: 0 30px; background: linear-gradient(45deg, #00d4ff, #0099cc); color: white; border: none; border-radius: 12px; cursor: pointer; font-size: 16px; font-weight: 600; box-shadow: 0 4px 15px rgba(0, 212, 255, 0.3); } #search-btn:hover { background: linear-gradient(45deg, #0099cc, #0077aa); transform: translateY(-2px); } .result-container { display: none; animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .basic-info { display: flex; align-items: center; background: rgba(255, 255, 255, 0.03); border-radius: 15px; padding: 20px; margin-bottom: 20px; border: 1px solid rgba(255, 255, 255, 0.08); } .avatar { width: 90px; height: 90px; border-radius: 50%; margin-right: 20px; border: 3px solid #00d4ff; box-shadow: 0 5px 20px rgba(0, 212, 255, 0.4); } .basic-info div h2 { color: #fff; font-size: 20px; margin-bottom: 5px; } .basic-info div p { color: rgba(255, 255, 255, 0.6); font-size: 14px; margin: 3px 0; } .qq-level { display: inline-block; background: rgba(0, 212, 255, 0.1); padding: 4px 10px; border-radius: 20px; font-size: 13px; color: #00d4ff; margin-top: 5px; } .level-icon { margin-right: 5px; font-size: 14px; } .value-container { background: rgba(255, 255, 255, 0.03); border-radius: 15px; padding: 25px; margin: 20px 0; border: 1px solid rgba(255, 255, 255, 0.08); text-align: center; position: relative; } .value-container::before { content: ""; position: absolute; top: -50%; left: -50%; width: 100%; height: 100%; background: radial-gradient(circle, rgba(0, 212, 255, 0.1) 0%, transparent 70%); } .value-text { font-size: 14px; margin-bottom: 10px; color: rgba(255, 255, 255, 0.6); position: relative; z-index: 1; } .value-amount { font-size: 42px; color: #ff6b35; font-weight: 700; text-shadow: 0 0 30px rgba(255, 107, 53, 0.4); position: relative; z-index: 1; } .value-indicator { height: 8px; background: rgba(255, 255, 255, 0.1); border-radius: 4px; margin: 15px 0; overflow: hidden; position: relative; z-index: 1; } .value-bar { height: 100%; background: linear-gradient(90deg, #ff6b35, #ffc857); width: 0; transition: width 1s cubic-bezier(0.68, -0.55, 0.27, 1.55); border-radius: 4px; } .numerology-container { background: rgba(255, 255, 255, 0.03); border-radius: 15px; padding: 20px; margin-bottom: 20px; border: 1px solid rgba(255, 255, 255, 0.08); position: relative; } .numerology-container::before { content: ""; position: absolute; top: 0; right: 0; width: 100px; height: 100px; background: radial-gradient(circle, rgba(147, 51, 234, 0.15) 0%, transparent 70%); } .numerology-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .numerology-title { font-size: 16px; font-weight: 600; color: #a78bfa; } .numerology-rating { background: linear-gradient(135deg, rgba(147, 51, 234, 0.2), rgba(139, 92, 246, 0.1)); padding: 6px 15px; border-radius: 20px; font-size: 14px; font-weight: 600; color: #a78bfa; } .numerology-text { font-size: 14px; color: rgba(255, 255, 255, 0.7); line-height: 1.8; position: relative; z-index: 1; } .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 20px; } .stat-card { background: rgba(255, 255, 255, 0.03); border-radius: 12px; padding: 18px; border: 1px solid rgba(255, 255, 255, 0.08); position: relative; overflow: hidden; } .stat-card::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: linear-gradient(180deg, #00d4ff, #0099cc); } .stat-title { font-size: 13px; color: rgba(255, 255, 255, 0.5); margin-bottom: 8px; } .stat-value { font-size: 18px; font-weight: 600; color: #fff; } .stat-card.special::before { background: linear-gradient(180deg, #ff6b35, #ffc857); } .stat-card.market::before { background: linear-gradient(180deg, #10b981, #059669); } .stat-card.trend::before { background: linear-gradient(180deg, #f59e0b, #d97706); } .detail-container { margin-top: 20px; } .detail-title { font-size: 16px; color: #00d4ff; margin-bottom: 15px; padding-bottom: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .detail-list { display: flex; flex-direction: column; gap: 10px; } .detail-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 15px; background: rgba(255, 255, 255, 0.03); border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.05); } .detail-label { font-size: 14px; color: rgba(255, 255, 255, 0.7); } .detail-score { font-size: 14px; font-weight: 600; color: #00d4ff; } .loading { text-align: center; display: none; margin: 20px 0; } .loading-spinner { display: inline-block; width: 40px; height: 40px; border: 4px solid rgba(0, 212, 255, 0.2); border-radius: 50%; border-top-color: #00d4ff; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .error { color: #ff5722; text-align: center; padding: 12px; background: rgba(255, 87, 34, 0.1); border-radius: 8px; margin-bottom: 15px; display: none; } @media (max-width: 768px) { body { padding: 5px; font-size: 11px; } .container { padding: 8px; max-height: calc(100vh - 10px); overflow-y: auto; border-radius: 12px; } h1 { font-size: 14px; margin-bottom: 8px; font-weight: 600; } h1:after { margin: 4px auto; width: 60px; height: 1px; } .search-box { margin-bottom: 8px; gap: 6px; } #qq-input, #search-btn { padding: 8px 10px; font-size: 13px; border-radius: 8px; } .basic-info { padding: 8px; margin-bottom: 8px; border-radius: 10px; } .avatar { width: 40px; height: 40px; margin-right: 8px; border-width: 2px; } .basic-info div h2 { font-size: 13px; margin-bottom: 2px; } .basic-info div p { font-size: 11px; margin: 1px 0; } .qq-level { padding: 1px 6px; font-size: 10px; margin-top: 3px; } .level-icon { font-size: 10px; } .value-container { padding: 10px; margin: 8px 0; border-radius: 10px; } .value-text { font-size: 11px; margin-bottom: 4px; } .value-amount { font-size: 20px; } .value-indicator { height: 5px; margin: 8px 0; border-radius: 3px; } .numerology-container { padding: 8px; margin-bottom: 8px; border-radius: 10px; } .numerology-header { margin-bottom: 6px; } .numerology-title { font-size: 12px; } .numerology-rating { padding: 2px 8px; font-size: 11px; border-radius: 12px; } .numerology-text { font-size: 11px; line-height: 1.4; } .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 6px; margin-bottom: 8px; } .stat-card { padding: 6px 8px; border-radius: 8px; } .stat-card::before { width: 3px; } .stat-title { font-size: 10px; margin-bottom: 2px; } .stat-value { font-size: 12px; } .detail-container { margin-top: 8px; } .detail-title { font-size: 12px; margin-bottom: 6px; padding-bottom: 4px; } .detail-list { gap: 4px; } .detail-item { padding: 6px 8px; border-radius: 6px; } .detail-label { font-size: 11px; } .detail-score { font-size: 11px; } .loading { margin: 8px 0; } .loading-spinner { width: 25px; height: 25px; } .loading p { font-size: 11px; } .error { padding: 6px; margin-bottom: 8px; font-size: 11px; border-radius: 6px; } } </style></head><body> <div class="container"> <h1>QQ号码价值评估系统</h1> <div class="search-box"> <input type="text" id="qq-input" placeholder="请输入QQ号码" maxlength="11"> <button id="search-btn">立即评估</button> </div> <div class="loading" id="loading"> <div class="loading-spinner"></div> <p>正在评估中,请稍候...</p> </div> <div class="error" id="error"></div> <div class="result-container" id="result-container"> <div class="basic-info"> <img id="avatar" class="avatar" src="" alt="QQ头像"> <div> <h2 id="qq-nickname"></h2> <p>QQ号码: <span id="qq-number"></span></p> <p>QQ邮箱: <span id="qq-email"></span></p> <div id="qq-level" class="qq-level" style="display: none;"> <span class="level-icon">⭐</span><span id="level-value">0</span>级 </div> </div> </div> <div class="value-container"> <div class="value-text">系统预估市场参考价(元)</div> <div class="value-amount">¥ <span id="value-score">0</span></div> <div class="value-indicator"> <div class="value-bar" id="value-bar"></div> </div> </div> <div class="numerology-container"> <div class="numerology-header"> <span class="numerology-title">数字命理分析</span> <span class="numerology-rating" id="numerology-rating">【平签】</span> </div> <div class="numerology-text" id="numerology-text">"风平浪静,安稳度日。"</div> </div> <div class="stats-grid"> <div class="stat-card"><div class="stat-title">综合评级</div><div class="stat-value" id="rating-value">普通号</div></div> <div class="stat-card special"><div class="stat-title">号段规律</div><div class="stat-value" id="pattern-value">无特殊规律</div></div> <div class="stat-card market"><div class="stat-title">市场参考</div><div class="stat-value" id="market-value">普通号段</div></div> <div class="stat-card trend"><div class="stat-title">行情趋势</div><div class="stat-value" id="trend-value">价格稳定</div></div> </div> <div class="detail-container"> <h3 class="detail-title">详细评估指标</h3> <div class="detail-list"></div> </div> </div> </div> <script> document.getElementById('search-btn').addEventListener('click', function() { const qqNumber = document.getElementById('qq-input').value.trim(); if (!qqNumber || !/^[1-9]\d{4,10}$/.test(qqNumber)) { showError('请输入5-11位的有效QQ号码'); return; } document.getElementById('loading').style.display = 'block'; document.getElementById('error').style.display = 'none'; document.getElementById('result-container').style.display = 'none';
fetchQQInfo(qqNumber).then(qqInfo => { const result = evaluateQQValue(qqNumber, qqInfo); displayResult(qqNumber, result, qqInfo); }).catch(error => { showError('查询QQ信息失败'); }).finally(() => { document.getElementById('loading').style.display = 'none'; }); }); async function fetchQQInfo(qqNumber) { const uin = '你的QQ号'; const skey = '你的skey'; const p_skey = '你的p_skey';
try { const response = await fetch(`https://apis.kit9.cn/api/qq_new_member/api.php?uin=${uin}&skey=${skey}&p_skey=${p_skey}&qq=${qqNumber}`); const data = await response.json(); if (data.code === 200 && data.data) { const qqData = data.data; return { level: parseInt(qqData.qq_level) || 0, nickname: qqData.nick || qqData.nickname || 'QQ用户', avatar: qqData.avatar_url || qqData.imgurl || `https://q2.qlogo.cn/headimg_dl?dst_uin=${qqNumber}&spec=640`, services: [] }; } } catch (error) { console.error('查询QQ信息失败:', error); }
return { level: 0, nickname: 'QQ用户', avatar: '', services: [] }; } function displayResult(qq, data, qqInfo) { const avatarUrl = qqInfo && qqInfo.avatar ? qqInfo.avatar : `https://q2.qlogo.cn/headimg_dl?dst_uin=${qq}&spec=640`; document.getElementById('avatar').src = avatarUrl; document.getElementById('qq-nickname').textContent = qqInfo && qqInfo.nickname ? qqInfo.nickname : 'QQ用户'; document.getElementById('qq-number').textContent = qq; document.getElementById('qq-email').textContent = `${qq}@qq.com`;
if (qqInfo && qqInfo.level > 0) { document.getElementById('level-value').textContent = qqInfo.level; const level = qqInfo.level; const crowns = Math.floor(level / 64); const suns = Math.floor((level % 64) / 16); const moons = Math.floor((level % 16) / 4); const stars = level % 4; let iconStr = ''; if (crowns > 0) iconStr += '👑'.repeat(crowns); if (suns > 0) iconStr += '☀️'.repeat(suns); if (moons > 0) iconStr += '🌙'.repeat(moons); if (stars > 0) iconStr += '⭐'.repeat(stars); document.querySelector('.level-icon').textContent = iconStr; document.getElementById('qq-level').style.display = 'inline-block'; } else { document.getElementById('qq-level').style.display = 'none'; }
const numerology = analyzeNumerology(qq); document.getElementById('numerology-rating').textContent = `【${numerology.rating}】`; document.getElementById('numerology-text').textContent = `"${numerology.text}"`;
document.getElementById('rating-value').textContent = getRating(qq, data.totalValue); document.getElementById('pattern-value').textContent = analyzePattern(qq); document.getElementById('market-value').textContent = getMarketReference(qq.length); document.getElementById('trend-value').textContent = getMarketTrend(qq.length);
const sortedDetails = data.details.sort((a, b) => b.score - a.score); const listContainer = document.querySelector('.detail-list'); listContainer.innerHTML = sortedDetails.map(item => ` <div class="detail-item"> <span class="detail-label">${item.label}</span> <span class="detail-score">${item.score}分</span> </div> `).join('');
document.getElementById('value-score').textContent = data.totalValue.toLocaleString();
setTimeout(() => { document.getElementById('value-bar').style.width = `${Math.min(100, data.totalValue / 50000 * 100)}%`; }, 100);
document.getElementById('result-container').style.display = 'block'; } function analyzeNumerology(qq) { const sum = qq.split('').reduce((acc, digit) => acc + parseInt(digit), 0); const remainder = sum % 9 || 9; const data = { 1: { rating: '吉签', text: '一帆风顺,事业有成。贵人相助,财源广进。' }, 2: { rating: '平签', text: '风平浪静,安稳度日。知足常乐,无灾无难。' }, 3: { rating: '吉签', text: '三生万物,欣欣向荣。吉祥如意,步步高升。' }, 4: { rating: '平签', text: '四平八稳,脚踏实地。稳中求进,厚积薄发。' }, 5: { rating: '吉签', text: '五谷丰登,五福临门。鸿运当头,好事连连。' }, 6: { rating: '吉签', text: '六六大顺,事事顺心。财源滚滚,家庭和睦。' }, 7: { rating: '上签', text: '七星高照,好运连连。贵人相助,前程似锦。' }, 8: { rating: '上签', text: '八方来财,大发特发。事业腾飞,万事如意。' }, 9: { rating: '吉签', text: '九九归一,功德圆满。天长地久,幸福安康。' } }; return data[remainder] || data[2]; } function getRating(qq, value) { const length = qq.length; const hasPattern = /(\d)\1{2,}/.test(qq) || /(123|234|345|456|567|678|789|987|876|765|654|543|432|321)/.test(qq); if (length <= 5) return '极品靓号'; if (length === 6 && hasPattern) return '极品靓号'; if (length === 6) return '精品靓号'; if (length === 7 && hasPattern) return '精品靓号'; if (length === 7) return '优质号'; if (hasPattern) return '特色号'; if (value > 2000) return '优质号'; if (value > 1000) return '普通靓号'; return '普通号'; } function analyzePattern(qq) { if (/^(\d)\1+$/.test(qq)) return '全同号'; if (/^(\d)\1{3,}/.test(qq)) return '豹子号(4连+)'; if (/(\d)\1{2}/.test(qq)) return '豹子号(3连)'; if (/1234|2345|3456|4567|5678|6789|9876|8765|7654|6543|5432|4321/.test(qq)) return '顺子号(4连)'; if (/123|234|345|456|567|678|789|987|876|765|654|543|432|321/.test(qq)) return '顺子号(3连)'; if (/^[1-9]0+$/.test(qq)) return '尾巴号'; if (/^(\d{2,3})\1+$/.test(qq)) return '循环号'; if (/^(\d)(\d)\1\2/.test(qq)) return 'ABAB型'; if (/^(\d\d)\1+$/.test(qq)) return 'AA型'; return '无特殊规律'; } function getMarketReference(length) { const refs = { 5: '5位稀有', 6: '6位稀缺', 7: '7位稀有', 8: '8位普通', 9: '9位常见', 10: '10位普通', 11: '11位常见' }; return refs[length] || '普通号段'; } function getMarketTrend(length) { if (length <= 6) return '价格持续上涨'; if (length === 7) return '价格稳中有升'; if (length === 8) return '价格趋于平稳'; return '价格稳定'; } function evaluateQQValue(qq, qqInfo) { const length = qq.length; const lengthValue = (12 - length) * 800; const lengthScore = Math.round(lengthValue / 50);
let repeatValue = 0; const counts = {}; qq.split('').forEach(num => { counts[num] = (counts[num] || 0) + 1; }); Object.values(counts).forEach(cnt => { if(cnt >= 2) repeatValue += Math.pow(3, cnt) * 50; }); const repeatScore = Math.round(repeatValue / 50);
let straightValue = 0; const straightMatches = qq.match(/(\d)\1{2,}/g) || []; straightMatches.forEach(match => { straightValue += Math.pow(3, match.length) * 100; }); const straightScore = Math.round(straightValue / 50);
let sequenceValue = 0; if(/(123|234|345|456|567|678|789|987|876|765|654|543|432|321)/.test(qq)) sequenceValue = 800; const sequenceScore = Math.round(sequenceValue / 50);
let specialValue = 0; if(/^[1-9]0+$/.test(qq)) specialValue = 500 * (qq.match(/0/g) || []).length; const specialScore = Math.round(specialValue / 50);
let levelValue = 0, levelScore = 0; if (qqInfo && qqInfo.level > 0) { levelValue = qqInfo.level * 10; levelScore = Math.round(levelValue / 50); }
const totalValue = lengthValue + repeatValue + straightValue + sequenceValue + specialValue + levelValue;
return { lengthScore, repeatScore, straightScore, sequenceScore, specialScore, levelScore, totalValue, details: [ { label: '号码长度', score: lengthScore, value: lengthValue }, { label: '重复数字', score: repeatScore, value: repeatValue }, { label: '豹子号加成', score: straightScore, value: straightValue }, { label: '顺子号加成', score: sequenceScore, value: sequenceValue }, { label: '特殊组合', score: specialScore, value: specialValue }, { label: 'QQ等级', score: levelScore, value: levelValue } ] }; } function showError(message) { const errorEl = document.getElementById('error'); errorEl.textContent = message; errorEl.style.display = 'block'; } </script></body></html>复制代码 |



