声明:优化使用了AI辅助
前段时间看直播,好多评估QQ号码的,人气还不错,有喜欢的可以自娱自乐一下。
1、添加了接口,可以查询QQ等级等信息
2、适配手机页面
3、食用方法:下载源码,保存成html,修改文档中的参数,搜索“你的QQ号”,替换里面的uni=你的QQ号、你的skey和你的p_skey,后面两个可以登陆vip.qq.com,用开发者模式查看,接口为免费接口,请勿滥用。

<!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>

