NTA Score To Percentile & Rank Calculator tailwind.config = { darkMode: 'class', theme: { extend: { colors: { brand: { 50: '#eef2ff', 100: '#e0e7ff', 500: '#6366f1', 600: '#4f46e5', 700: '#4338ca', 900: '#312e81', }, accent: { cyan: '#06b6d4', emerald: '#10b981', amber: '#f59e0b', rose: '#f43f5e', purple: '#a855f7' } }, fontFamily: { sans: ['Inter', 'sans-serif'], } } } } body { font-family: 'Inter', sans-serif; } .glass-panel { background: rgba(255, 255, 255, 0.75); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgba(229, 231, 235, 0.8); } .dark .glass-panel { background: rgba(15, 23, 42, 0.75); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.08); } .glass-card { background: rgba(255, 255, 255, 0.6); backdrop-filter: blur(10px); border: 1px solid rgba(209, 213, 219, 0.5); } .dark .glass-card { background: rgba(30, 41, 59, 0.5); backdrop-filter: blur(10px); border: 1px solid rgba(51, 65, 85, 0.5); } .glow-brand { box-shadow: 0 0 30px -5px rgba(99, 102, 241, 0.35); } .glow-cyan { box-shadow: 0 0 30px -5px rgba(6, 182, 212, 0.35); } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #6366f1; border-radius: 9999px; } ::-webkit-scrollbar-thumb:hover { background: #4f46e5; } @media print { .no-print { display: none !important; } body { background: white !important; color: black !important; } .glass-panel, .glass-card { background: none !important; border: 1px solid #ccc !important; box-shadow: none !important; } }

NTA Analytics Hub

NTA Scorecard Normalisation Engine

NTA Score to Percentile & AIR Predictor

Algorithmically models standard deviation shifts, candidate volume distribution curves, and difficulty normalization rules for official NTA scorecards (JEE Main, NEET UG, CUET UG).

Quick Presets:

Input Parameters

JEE Main (Engineering) - Max 300 NEET UG (Medical) - Max 720 CUET UG (General) - Max 800 Custom Score Mode
210 / 300
Marks
Moderate Shift (1.0x)
Very Hard (+5%) Moderate Very Easy (-4%)
Official NTA Volume

Official NTA Percentile Formula

NTA calculates Percentile Scores up to 7 decimal places to eliminate ties:

P = (100 × Candidates with score ≤ Raw Score) / Total Candidates

Estimated NTA Percentile

99.1847251
Confidence Range: 98.95% - 99.35%

Estimated All India Rank (AIR)

#12,030
AIR Range: 11,100 - 12,900

Performance Band

Top 1.0% (Elite Tier)

High probability of top-tier premier national institutes.

Real-time Visual Analytics
Candidates Below You 1,463,050
Candidates Above You 12,053
Raw Marks % 70.0%
Shift Normalisation Baseline (1.0x)

Institute & Category Cutoff Eligibility

Category: GEN

Disclaimer: This application provides statistical normalization estimates using mathematical bell curve distribution algorithms and historically published NTA benchmark statistics. Official scores and ranks are solely released by the National Testing Agency.

© NTA Percentile & Rank Analytics Engine.

/* Application State */ let currentTheme = 'dark'; let selectedCategory = 'GEN'; let shiftFactor = 1.0; // Moderate shift baseline let activeTab = 'curve'; let chartCurveInstance = null; let chartTrendInstance = null; /* Standardized Examination Datasets */ const EXAM_DATASETS = { jee_main: { name: "JEE Main", maxMarks: 300, defaultCandidates: 1475103, defaultMarks: 210, cutoffs: [ { name: "JEE Advanced Qualification", genPct: 93.2, obcPct: 79.4, ewsPct: 80.3, scPct: 61.1, stPct: 47.9, icon: "fa-trophy" }, { name: "Top NITs (CSE Branch)", genPct: 98.8, obcPct: 97.5, ewsPct: 97.8, scPct: 92.0, stPct: 88.0, icon: "fa-laptop-code" }, { name: "Core NITs (EE/Mech/Civil)", genPct: 96.2, obcPct: 94.0, ewsPct: 94.5, scPct: 85.0, stPct: 78.0, icon: "fa-building-columns" } ] }, neet_ug: { name: "NEET UG", maxMarks: 720, defaultCandidates: 2036316, defaultMarks: 655, cutoffs: [ { name: "Qualifying Cutoff Threshold", genPct: 50.0, obcPct: 40.0, ewsPct: 50.0, scPct: 40.0, stPct: 40.0, icon: "fa-user-check" }, { name: "Govt Medical College MBBS (AIQ)", genPct: 98.2, obcPct: 97.5, ewsPct: 97.8, scPct: 91.5, stPct: 89.0, icon: "fa-hospital" }, { name: "Top AIIMS Institutions", genPct: 99.8, obcPct: 99.4, ewsPct: 99.5, scPct: 97.0, stPct: 95.0, icon: "fa-stethoscope" } ] }, cuet_ug: { name: "CUET UG", maxMarks: 800, defaultCandidates: 1340000, defaultMarks: 760, cutoffs: [ { name: "Delhi Univ North Campus Top Courses", genPct: 98.9, obcPct: 96.5, ewsPct: 97.0, scPct: 90.0, stPct: 85.0, icon: "fa-landmark" }, { name: "DU South Campus Merit Courses", genPct: 94.0, obcPct: 90.0, ewsPct: 91.5, scPct: 80.0, stPct: 75.0, icon: "fa-award" }, { name: "Central Univ Qualification Threshold", genPct: 82.0, obcPct: 75.0, ewsPct: 77.0, scPct: 65.0, stPct: 58.0, icon: "fa-book-open" } ] }, custom: { name: "Custom Exam", maxMarks: 300, defaultCandidates: 1000000, defaultMarks: 180, cutoffs: [ { name: "Top 1% Elite Qualification Band", genPct: 99.0, obcPct: 98.0, ewsPct: 98.2, scPct: 92.0, stPct: 88.0, icon: "fa-star" }, { name: "Top 5% Merit Qualification Band", genPct: 95.0, obcPct: 92.0, ewsPct: 93.0, scPct: 82.0, stPct: 75.0, icon: "fa-circle-check" }, { name: "General Benchmark Threshold", genPct: 85.0, obcPct: 78.0, ewsPct: 80.0, scPct: 65.0, stPct: 58.0, icon: "fa-check" } ] } }; window.onload = function() { calculatePercentile(); }; function toggleTheme() { const htmlEl = document.documentElement; if (htmlEl.classList.contains('dark')) { htmlEl.classList.remove('dark'); currentTheme = 'light'; } else { htmlEl.classList.add('dark'); currentTheme = 'dark'; } calculatePercentile(); } function applyExamPreset(examKey, score) { document.getElementById('examSelect').value = examKey; handleExamChange(); if (score !== undefined) { document.getElementById('rawMarks').value = score; document.getElementById('marksSlider').value = score; } calculatePercentile(); } function handleExamChange() { const examKey = document.getElementById('examSelect').value; const data = EXAM_DATASETS[examKey]; document.getElementById('maxMarks').value = data.maxMarks; document.getElementById('totalCandidates').value = data.defaultCandidates; document.getElementById('rawMarks').value = data.defaultMarks; document.getElementById('marksSlider').max = data.maxMarks; calculatePercentile(); } function syncMarksInput(val) { document.getElementById('rawMarks').value = val; calculatePercentile(); } function setCategory(cat) { selectedCategory = cat; const categories = ['GEN', 'OBC', 'EWS', 'SC', 'ST']; categories.forEach(c => { const btn = document.getElementById(`cat-${c}`); if (c === cat) { btn.className = "cat-btn py-2 rounded-lg text-xs font-bold border border-brand-500 bg-brand-500/10 text-brand-500 text-center shadow-sm"; } else { btn.className = "cat-btn py-2 rounded-lg text-xs font-bold border border-slate-300 dark:border-slate-700 text-slate-600 dark:text-slate-400 text-center"; } }); document.getElementById('selectedCategoryBadge').innerText = `Category: ${cat}`; calculatePercentile(); } function handleShiftChange(val) { const numVal = parseInt(val); const label = document.getElementById('shiftLabel'); if (numVal === -2) { shiftFactor = 1.05; label.innerText = "Very Hard Shift (+5% Bonus)"; } else if (numVal === -1) { shiftFactor = 1.025; label.innerText = "Hard Shift (+2.5% Bonus)"; } else if (numVal === 0) { shiftFactor = 1.0; label.innerText = "Moderate Shift (1.0x)"; } else if (numVal === 1) { shiftFactor = 0.975; label.innerText = "Easy Shift (-2.5% Adjustment)"; } else if (numVal === 2) { shiftFactor = 0.95; label.innerText = "Very Easy Shift (-5% Penalty)"; } calculatePercentile(); } function resetCalculator() { document.getElementById('examSelect').value = 'jee_main'; document.getElementById('shiftSlider').value = 0; shiftFactor = 1.0; document.getElementById('shiftLabel').innerText = "Moderate Shift (1.0x)"; setCategory('GEN'); handleExamChange(); } function calculatePercentile() { const rawMarks = parseFloat(document.getElementById('rawMarks').value) || 0; const maxMarks = parseFloat(document.getElementById('maxMarks').value) || 1; const totalCandidates = parseInt(document.getElementById('totalCandidates').value) || 100000; // Sync Slider limits const slider = document.getElementById('marksSlider'); slider.max = maxMarks; slider.value = Math.min(Math.max(rawMarks, 0), maxMarks); document.getElementById('marksRatio').innerText = `${rawMarks} / ${maxMarks}`; const percentage = (rawMarks / maxMarks) * 100; document.getElementById('pctScoreText').innerText = Math.max(percentage, 0).toFixed(1) + '%'; document.getElementById('shiftImpactText').innerText = document.getElementById('shiftLabel').innerText.split(' ')[0]; // Calculate Normalised Ratio with Shift Adjustment const adjustedRatio = Math.min(Math.max((rawMarks * shiftFactor) / maxMarks, 0.00001), 0.99999); // High Precision Logistic Curve Formula to simulate NTA Candidate S-Curve let percentile = 0; if (adjustedRatio >= 0.98) { percentile = 99.9 + (adjustedRatio - 0.98) * (0.0999999 / 0.02); } else if (adjustedRatio >= 0.85) { percentile = 98.0 + (adjustedRatio - 0.85) * (1.9 / 0.13); } else if (adjustedRatio >= 0.50) { percentile = 80.0 + (adjustedRatio - 0.50) * (18.0 / 0.35); } else if (adjustedRatio >= 0.25) { percentile = 45.0 + (adjustedRatio - 0.25) * (35.0 / 0.25); } else { percentile = (adjustedRatio / 0.25) * 45.0; } percentile = Math.min(Math.max(percentile, 0.0000001), 99.9999999); // Format Percentile to 7 decimal places (Official NTA Style) document.getElementById('percentileDisplay').innerText = percentile.toFixed(7); // Confidence Bounds const lowerBound = Math.max(percentile - 0.22, 0).toFixed(2); const upperBound = Math.min(percentile + 0.18, 100).toFixed(2); document.getElementById('percentileBounds').innerText = `${lowerBound}% - ${upperBound}%`; // AIR Rank Estimation const candidatesAbove = Math.round(((100 - percentile) / 100) * totalCandidates); const midRank = Math.max(candidatesAbove + 1, 1); const lowerRank = Math.max(Math.round(midRank * 0.92), 1); const upperRank = Math.round(midRank * 1.08); document.getElementById('midRankDisplay').innerText = `#${midRank.toLocaleString()}`; document.getElementById('rankRangeDisplay').innerText = `${lowerRank.toLocaleString()} - ${upperRank.toLocaleString()}`; document.getElementById('belowCountText').innerText = Math.max(totalCandidates - candidatesAbove, 0).toLocaleString(); document.getElementById('aboveCountText').innerText = candidatesAbove.toLocaleString(); // Update Performance Tier updateTierBadge(percentile); // Render Cutoff Eligibility Grid renderCutoffCards(percentile); // Refresh Chart Display updateActiveChart(percentile, rawMarks, maxMarks); } function updateTierBadge(percentile) { const badge = document.getElementById('tierBadge'); const desc = document.getElementById('tierDescription'); if (percentile >= 99.9) { badge.className = "inline-block px-3 py-1 rounded-full text-xs font-bold bg-amber-500/15 text-amber-500 border border-amber-500/30"; badge.innerText = "Top 0.1% (Super Elite Tier)"; desc.innerText = "Top Ranker Band. High probability of top seats in premier institutes."; } else if (percentile >= 99.0) { badge.className = "inline-block px-3 py-1 rounded-full text-xs font-bold bg-emerald-500/15 text-emerald-500 border border-emerald-500/30"; badge.innerText = "Top 1.0% (Elite Tier)"; desc.innerText = "High probability of premier top-tier national institutions."; } else if (percentile >= 95.0) { badge.className = "inline-block px-3 py-1 rounded-full text-xs font-bold bg-brand-500/15 text-brand-500 border border-brand-500/30"; badge.innerText = "Top 5.0% (High Merit Band)"; desc.innerText = "Solid score for reputed state & national institutes."; } else if (percentile >= 85.0) { badge.className = "inline-block px-3 py-1 rounded-full text-xs font-bold bg-accent-cyan/15 text-accent-cyan border border-accent-cyan/30"; badge.innerText = "Top 15% (Above Average)"; desc.innerText = "Qualifies for various national & state counseling rounds."; } else { badge.className = "inline-block px-3 py-1 rounded-full text-xs font-bold bg-slate-500/15 text-slate-400 border border-slate-500/30"; badge.innerText = "Standard Performance Tier"; desc.innerText = "May require dedicated state counseling rounds or next attempt."; } } function renderCutoffCards(percentile) { const examKey = document.getElementById('examSelect').value; const data = EXAM_DATASETS[examKey]; const container = document.getElementById('eligibilityGrid'); container.innerHTML = ''; data.cutoffs.forEach(item => { let requiredPct = item.genPct; if (selectedCategory === 'OBC') requiredPct = item.obcPct; else if (selectedCategory === 'EWS') requiredPct = item.ewsPct; else if (selectedCategory === 'SC') requiredPct = item.scPct; else if (selectedCategory === 'ST') requiredPct = item.stPct; const isEligible = percentile >= requiredPct; const card = document.createElement('div'); card.className = `p-4 rounded-xl border ${isEligible ? 'bg-emerald-500/5 border-emerald-500/30' : 'bg-slate-500/5 border-slate-300 dark:border-slate-800'} transition`; card.innerHTML = `
${isEligible ? 'Qualified' : 'Target ' + requiredPct + '%ile'}

${item.name}

Est. ${selectedCategory} Cutoff: ${requiredPct}%ile

`; container.appendChild(card); }); } function switchTab(tabName) { activeTab = tabName; ['curve', 'trend'].forEach(t => { const btn = document.getElementById(`tab-${t}`); const view = document.getElementById(`view-${t}`); if (t === tabName) { btn.className = "tab-btn px-3.5 py-1.5 rounded-lg text-xs font-semibold bg-white dark:bg-slate-800 text-brand-600 dark:text-brand-400 shadow-sm transition"; view.classList.remove('hidden'); } else { btn.className = "tab-btn px-3.5 py-1.5 rounded-lg text-xs font-semibold text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white transition"; view.classList.add('hidden'); } }); calculatePercentile(); } function updateActiveChart(percentile, rawMarks, maxMarks) { const isDark = document.documentElement.classList.contains('dark'); const gridColor = isDark ? 'rgba(255,255,255,0.06)' : 'rgba(0,0,0,0.06)'; const textColor = isDark ? '#94a3b8' : '#64748b'; if (activeTab === 'curve') { renderBellCurveChart(percentile, isDark, gridColor, textColor); } else if (activeTab === 'trend') { renderTrendChart(rawMarks, maxMarks, isDark, gridColor, textColor); } } function renderBellCurveChart(userPercentile, isDark, gridColor, textColor) { const ctx = document.getElementById('bellCurveChart').getContext('2d'); if (chartCurveInstance) chartCurveInstance.destroy(); const labels = []; const data = []; for (let x = 0; x ctx.dataIndex === closestIndex ? 8 : 0, pointBackgroundColor: '#06b6d4', pointBorderColor: '#ffffff', pointBorderWidth: 2 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { if (context.dataIndex === closestIndex) { return ` Your Position: ${userPercentile.toFixed(2)} %ile`; } return ` Candidate Density at ${context.label}`; } } } }, scales: { x: { grid: { color: gridColor }, ticks: { color: textColor, maxTicksLimit: 10 } }, y: { display: false } } } }); } function renderTrendChart(rawMarks, maxMarks, isDark, gridColor, textColor) { const ctx = document.getElementById('trendChart').getContext('2d'); if (chartTrendInstance) chartTrendInstance.destroy(); const marksData = []; const percentileData = []; for (let pct = 0; pct m + ' Marks'), datasets: [{ label: 'Projected Percentile Curve', data: percentileData, borderColor: '#10b981', backgroundColor: 'rgba(16, 185, 129, 0.1)', fill: true, tension: 0.3, borderWidth: 3, pointRadius: 4 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { labels: { color: textColor } } }, scales: { x: { grid: { color: gridColor }, ticks: { color: textColor } }, y: { grid: { color: gridColor }, ticks: { color: textColor } } } } }); } function openModal() { const examKey = document.getElementById('examSelect').value; const data = EXAM_DATASETS[examKey]; document.getElementById('modalExamName').innerText = data.name; document.getElementById('modalCategory').innerText = selectedCategory; document.getElementById('modalRawMarks').innerText = `${document.getElementById('rawMarks').value} / ${document.getElementById('maxMarks').value}`; document.getElementById('modalShift').innerText = document.getElementById('shiftLabel').innerText; document.getElementById('modalPercentile').innerText = document.getElementById('percentileDisplay').innerText; document.getElementById('modalRank').innerText = document.getElementById('midRankDisplay').innerText; document.getElementById('modalCandidates').innerText = parseInt(document.getElementById('totalCandidates').value).toLocaleString(); const list = document.getElementById('modalCutoffsList'); list.innerHTML = ''; const userPct = parseFloat(document.getElementById('percentileDisplay').innerText); data.cutoffs.forEach(c => { let reqPct = c.genPct; if (selectedCategory === 'OBC') reqPct = c.obcPct; else if (selectedCategory === 'EWS') reqPct = c.ewsPct; else if (selectedCategory === 'SC') reqPct = c.scPct; else if (selectedCategory === 'ST') reqPct = c.stPct; const passed = userPct >= reqPct; const row = document.createElement('div'); row.className = "flex items-center justify-between p-2 rounded-lg bg-slate-100 dark:bg-slate-900"; row.innerHTML = ` ${c.name} (Req: ${reqPct}%ile) ${passed ? 'ELIGIBLE' : 'NOT ELIGIBLE'} `; list.appendChild(row); }); document.getElementById('scorecardModal').classList.remove('hidden'); } function closeModal() { document.getElementById('scorecardModal').classList.add('hidden'); }