phone number standards
phone number standards
Slovenia Phone Numbers: +386 Format, Validation & Country Code (2025)
Master Slovenia phone number validation with our complete +386 country code guide. Learn mobile prefixes (064-069), area codes (01-07), E.164 formatting, and how to integrate Telekom Slovenije, A1, Telemach, and T-2 numbers into your applications.
Slovenia Phone Numbers: Format, Validation & +386 Country Code Guide
Introduction
Build applications that interact with Slovenian users by correctly handling their phone numbers. Common challenges include validating user input across different formats (local vs. international), handling number portability between operators, implementing SMS delivery with proper operator routing, and ensuring GDPR compliance for phone number storage. This guide explores Slovenia's phone number system, providing the knowledge and tools to validate, format, and integrate these numbers into your projects.
What you'll learn: Number format validation, operator identification via MNC codes, AKOS numbering plan compliance, E.164 formatting, emergency and special number handling, number portability checks, GDPR requirements, and SMS integration best practices.
Background: Slovenia's Telecommunications Landscape
Slovenia's telecommunications infrastructure transformed dramatically since independence in 1991. The country adopted the internet early (2008 documentation shows higher than average European adoption rates) and built a robust modern network. Slovenia uses country code +386, ISO code SI (alpha-2), and Mobile Country Code (MCC) 293. Today's infrastructure includes widespread fixed-line, mobile (with significant 5G rollout), and special-purpose numbers serving over 2 million people. AKOS and the ITU National Numbering Plan (updated 18 July 2018) define the current numbering plan.
Understanding Slovenia Phone Number Format
General Number Structure: Adhering to International Standards
Slovenian phone numbers follow the E.164 international numbering plan with country code +386. This standard ensures global interoperability and simplifies integration with international telecommunications systems. All Slovenian numbers are 9 digits long including the trunk prefix (0), or 8 digits after the country code in international format. Familiarize yourself with these formats to handle both domestic and international calls seamlessly.
| Type | Number Format (National) | E.164 Format | Example (National) | Example (E.164) | Usage |
|---|---|---|---|---|---|
| Geographic | 0[1-7][2-8]XXXXXX | +386 [1-7]XXXXXXX | 01 234 5678 | +386 1 234 5678 | Fixed-line services |
| Mobile | 06[4-9]XXXXXX | +386 6[4-9]XXXXXX | 064 123 456 | +386 64 123 456 | Mobile networks |
| Toll-Free | 080XXXXX(X) | +386 80XXXXX(X) | 080 1234 | +386 80 1234 | Free calling services |
| Premium | 089[1-3]XXX(XX) or 090XXXX(XX) | +386 89[1-3]XXX(XX) or +386 90XXXX(XX) | 0891 234 or 090 1234 | +386 891 234 or +386 90 1234 | Value-added services |
| Emergency | 112, 113 | +386 112, +386 113 | 112, 113 | +386 112, +386 113 | Emergency services |
| Social Services | 116XXX | +386 116XXX | 116 000 | +386 116 000 | Missing children, helplines |
Emergency and Short Codes (source: AKOS Emergency Call Numbers):
- 112: Single European emergency number (police, medical, fire) – toll-free
- 113: National police emergency number – toll-free
- 116 000: Missing children hotline (Ministry of Interior)
- 116 111: Child helpline (Friends of Youth Association)
- 116 123: Emotional support helpline (Slovenian Helpline Advisers)
Key takeaway: Always validate against both domestic and international formats to ensure compatibility with global calling patterns.
Slovenia Area Codes: Regional Fixed-Line Numbers
AKOS assigns geographic numbers based on regional zones according to the AKOS numbering plan. This structure organizes number allocation and identifies a caller's general location. Use this information to personalize user experiences or route calls efficiently.
- Format (National):
0[1-7][2-8]XXXXXX(9 digits including trunk prefix) - Format (International):
+386 [1-7]XXXXXXX(8 digits after country code) - Example:
01 234 5678(national) or+386 1 234 5678(international)
Complete Slovenia Area Code List (source: ITU National Numbering Plan):
- 01: Ljubljana region
- 02: Maribor, Ravne na Koroškem, Murska Sobota
- 03: Celje, Trbovlje
- 04: Kranj
- 05: Nova Gorica, Koper, Postojna
- 07: Novo Mesto, Krško
- 06: Reserved for mobile networks (not used for geographic numbers)
Dialing Instructions:
- Within same area (Telekom): Omit area code, dial 7 digits (e.g.,
234 5678) - Within Slovenia: Dial trunk prefix
0+ area code + number (e.g.,01 234 5678) - International: Dial
+386+ area code (without leading 0) + number (e.g.,+386 1 234 5678) - From ported numbers (T-2, etc.): Always dial full number with area code, even within same area
Slovenia Mobile Number Format: Operator Prefixes
Mobile numbers in Slovenia follow a distinct pattern, making them easy to identify. All mobile numbers start with 06 in national format or +386 6 in international format.
- Format (National):
06[4-9]XXXXXX(9 digits including trunk prefix) - Format (International):
+386 6[4-9]XXXXXX(8 digits after country code) - Example:
064 123 456(national) or+386 64 123 456(international)
Mobile Operator Prefix Mapping (source: ITU National Numbering Plan and Wikipedia):
| Prefix(es) | Operator | MNC Code(s) | Notes |
|---|---|---|---|
| 030, 040, 068, 069 | A1 Slovenia (formerly Simobil/Mobitel) | 40, 20 | Includes Bob, HoT (Hofer Telekom), Ventocom |
| 031, 041, 051, 065 | Telekom Slovenije | 41 | Includes Izimobil, Spar Mobil, Hip Mobil, SoftNET Mobil |
| 070, 071 | Telemach (formerly Tusmobil) | 70 | Third-largest operator |
| 064 | T-2 | 64 | Uses A1 network via roaming agreement |
| 0655 | Mega M | - | MVNO (smaller operator) |
| 0651 | SŽ-Infrastruktura | - | Railway infrastructure operator |
Key Features:
- Always start with
6(after country code/trunk prefix) - The second digit (4-9) and following digits identify the mobile operator
- All operators support SMS/MMS services
- Number portability active since 2006: Users can switch operators while keeping their number. The prefix no longer reliably indicates the current operator—implement real-time AKOS portability checks for accurate routing.
- Mobile Country Code (MCC): 293 for all Slovenian operators
How to Validate Slovenia Phone Numbers
Best Practices for Phone Number Validation
Robust validation prevents data entry errors, ensures data integrity, and improves user experience. Follow these best practices when validating Slovenian phone numbers.
Recommended Library: libphonenumber
For production applications, use Google's libphonenumber library, which provides comprehensive validation for all countries including Slovenia:
// Using libphonenumber-js (lightweight JavaScript port)
import { parsePhoneNumber, isValidPhoneNumber } from 'libphonenumber-js';
function validateSlovenianPhone(phoneNumber) {
try {
// Parse with country code or default region
const parsed = parsePhoneNumber(phoneNumber, 'SI');
// Check validity and country
if (parsed && parsed.country === 'SI' && isValidPhoneNumber(phoneNumber, 'SI')) {
return {
valid: true,
type: parsed.getType(), // 'MOBILE', 'FIXED_LINE', etc.
formatted: parsed.formatInternational(), // E.164 format
national: parsed.formatNational()
};
}
} catch (error) {
return { valid: false, error: error.message };
}
return { valid: false };
}
// Examples
console.log(validateSlovenianPhone('+386 64 123 456')); // Valid mobile
console.log(validateSlovenianPhone('01 234 5678')); // Valid landline
console.log(validateSlovenianPhone('112')); // Valid emergencyCustom Validation Functions (for lightweight implementations):
// Validation for Slovenian mobile numbers
function isValidSlovenianMobile(phoneNumber) {
// Remove spaces, non-digit characters, and the optional international/national prefix
const cleaned = phoneNumber.replace(/[\s\D]+/g, '').replace(/^(?:\+386|386|0)/, '');
// Check format using regex: 6[4-9] followed by 6 digits
return /^6[4-9]\d{6}$/.test(cleaned);
}
// Validation for landline numbers
function isValidSlovenianLandline(phoneNumber) {
const cleaned = phoneNumber.replace(/[\s\D]+/g, '').replace(/^(?:\+386|386|0)/, '');
// Geographic numbers: [1-7] (area code) followed by 7 digits total
// Format: [1-357][2-8]XXXXXX or 7[2-8]XXXXXX
return /^[1-357][2-8]\d{6}$/.test(cleaned) || /^7[2-8]\d{6}$/.test(cleaned);
}
// Validation for toll-free numbers
function isValidSlovenianTollFree(phoneNumber) {
const cleaned = phoneNumber.replace(/[\s\D]+/g, '').replace(/^(?:\+386|386|0)/, '');
// Toll-free: 80 followed by 4-6 digits (total 6-8 digits)
return /^80\d{4,6}$/.test(cleaned);
}
// Validation for premium numbers
function isValidSlovenianPremium(phoneNumber) {
const cleaned = phoneNumber.replace(/[\s\D]+/g, '').replace(/^(?:\+386|386|0)/, '');
// Premium: 89[1-3] followed by 2-5 digits, or 90 followed by 4-6 digits
return /^89[1-3]\d{2,5}$/.test(cleaned) || /^90\d{4,6}$/.test(cleaned);
}
// Comprehensive validator
function validateSlovenianNumber(phoneNumber) {
if (isValidSlovenianMobile(phoneNumber)) return { valid: true, type: 'mobile' };
if (isValidSlovenianLandline(phoneNumber)) return { valid: true, type: 'landline' };
if (isValidSlovenianTollFree(phoneNumber)) return { valid: true, type: 'toll-free' };
if (isValidSlovenianPremium(phoneNumber)) return { valid: true, type: 'premium' };
return { valid: false, type: null };
}
// Usage examples
console.log(isValidSlovenianMobile('+386 64 123 456')); // true
console.log(isValidSlovenianMobile('064123456')); // true
console.log(isValidSlovenianLandline('01 234 5678')); // true
console.log(isValidSlovenianTollFree('080 1234')); // true
console.log(isValidSlovenianPremium('0891 234')); // true
// Example test cases demonstrating potential issues and adaptations
console.log(isValidSlovenianMobile('+38664123456')); // true (handles missing space after country code)
console.log(isValidSlovenianMobile(' 64 123456 ')); // true (handles leading/trailing spaces)
console.log(isValidSlovenianMobile('(064) 123-456')); // true (handles parentheses and hyphens)This validation function handles various input formats, including those with or without the country code, spaces, and other non-digit characters. This flexibility handles real-world scenarios where users input numbers in different ways. Test your validation logic thoroughly with various edge cases to ensure robustness.
Performance Considerations: For high-volume applications processing thousands of validations per second, custom regex validation (50-100μs per validation) outperforms libphonenumber (200-500μs per validation). However, libphonenumber provides more comprehensive validation including length checking, invalid prefix detection, and automatic formatting. Choose based on your requirements: use libphonenumber for user-facing forms (accuracy priority) and custom regex for bulk processing (performance priority).
Formatting Slovenia Phone Numbers in E.164
Consistent formatting improves readability and ensures compatibility across different systems. Format Slovenian phone numbers according to international standards whenever possible.
Storage Format vs. Display Format:
- Storage: Always store in E.164 format (
+386XXXXXXXX) without spaces for database consistency and international compatibility - Display: Format according to user preference (national or international) with spacing for readability
function formatSlovenianNumber(phoneNumber, style = 'international') {
// Remove all non-digit characters and optional prefixes
const cleaned = phoneNumber.replace(/\D/g, '').replace(/^(?:386|0)/, '');
// Check if it's a mobile number
if (cleaned.match(/^6[4-9]\d{6}$/)) {
if (style === 'national') {
return `0${cleaned.slice(0, 2)} ${cleaned.slice(2, 5)} ${cleaned.slice(5)}`;
}
// International format: +386 6X XXX XXX
return `+386 ${cleaned.slice(0, 2)} ${cleaned.slice(2, 5)} ${cleaned.slice(5)}`;
}
// Handle landline numbers (8 digits total)
if (cleaned.match(/^[1-7]\d{7}$/)) {
if (style === 'national') {
return `0${cleaned.slice(0, 1)} ${cleaned.slice(1, 4)} ${cleaned.slice(4)}`;
}
return `+386 ${cleaned.slice(0, 1)} ${cleaned.slice(1, 4)} ${cleaned.slice(4)}`;
}
// Handle toll-free numbers (80 + 4-6 digits)
if (cleaned.match(/^80\d{4,6}$/)) {
if (style === 'national') {
return `0${cleaned.slice(0, 2)} ${cleaned.slice(2)}`;
}
return `+386 ${cleaned.slice(0, 2)} ${cleaned.slice(2)}`;
}
// Handle premium numbers
if (cleaned.match(/^(89[1-3]\d{2,5}|90\d{4,6})$/)) {
if (style === 'national') {
return `0${cleaned}`;
}
return `+386 ${cleaned}`;
}
// Invalid number or return null
return null;
}
// E.164 storage format (no spaces, always international)
function toE164(phoneNumber) {
const cleaned = phoneNumber.replace(/\D/g, '').replace(/^(?:386|0)/, '');
return `+386${cleaned}`;
}
// Examples
console.log(formatSlovenianNumber('064123456', 'national')); // 064 123 456
console.log(formatSlovenianNumber('064123456', 'international')); // +386 64 123 456
console.log(formatSlovenianNumber('1234567', 'national')); // 01 234 567
console.log(formatSlovenianNumber('1234567', 'international')); // +386 1 234 567
console.log(formatSlovenianNumber('801234', 'international')); // +386 80 1234
console.log(toE164('064 123 456')); // +38664123456This function handles mobile, landline, toll-free, and premium numbers, formatting them according to both national and international (E.164) standards. Consistent formatting presents phone numbers clearly and recognizably.
Error Handling: Gracefully Managing Issues
Robust error handling creates a smooth user experience. Anticipate potential issues and provide informative error messages.
const ERROR_CODES = {
INVALID_FORMAT: 'ERR_INVALID_FORMAT',
UNSUPPORTED_TYPE: 'ERR_UNSUPPORTED_TYPE',
NETWORK_PREFIX_MISMATCH: 'ERR_NETWORK_PREFIX',
PORTABILITY_CHECK_FAILED: 'ERR_PORTABILITY_CHECK'
};
// User-facing error messages (support i18n with message keys)
const ERROR_MESSAGES = {
en: {
ERR_INVALID_FORMAT: 'Invalid phone number format. Use the format +386 XX XXX XXX or 0XX XXX XXX.',
ERR_UNSUPPORTED_TYPE: 'This number type is not supported for this operation.',
ERR_NETWORK_PREFIX: 'The network prefix does not match any known operator.',
ERR_PORTABILITY_CHECK: 'Unable to verify current operator. Try again later.'
},
sl: {
ERR_INVALID_FORMAT: 'Neveljavna oblika telefonske številke. Uporabite obliko +386 XX XXX XXX ali 0XX XXX XXX.',
ERR_UNSUPPORTED_TYPE: 'Ta vrsta številke ni podprta za to operacijo.',
ERR_NETWORK_PREFIX: 'Predpona omrežja se ne ujema z nobenim znanim operaterjem.',
ERR_PORTABILITY_CHECK: 'Trenutnega operaterja ni mogoče preveriti. Poskusite znova pozneje.'
}
};
function validateNumber(phoneNumber, locale = 'en') {
try {
// Validation logic
const result = validateSlovenianNumber(phoneNumber);
if (!result.valid) {
throw new Error(ERROR_CODES.INVALID_FORMAT);
}
return { success: true, data: result };
} catch (error) {
return handleValidationError(error, locale);
}
}
function handleValidationError(error, locale = 'en') {
const messages = ERROR_MESSAGES[locale] || ERROR_MESSAGES.en;
const userMessage = messages[error.message] || messages.ERR_INVALID_FORMAT;
console.error(`Validation error: ${error.message}`);
return {
success: false,
error: {
code: error.message,
message: userMessage,
timestamp: new Date().toISOString()
}
};
}
// Retry logic for API calls (e.g., portability checks)
async function checkPortabilityWithRetry(phoneNumber, maxRetries = 3, timeout = 5000) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeout);
// Example AKOS API call (replace with actual endpoint when available)
const response = await fetch(`https://api.akos-rs.si/portability/${phoneNumber}`, {
signal: controller.signal
});
clearTimeout(timeoutId);
if (response.ok) {
return await response.json();
}
if (attempt === maxRetries) {
throw new Error(ERROR_CODES.PORTABILITY_CHECK_FAILED);
}
// Exponential backoff
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));
} catch (error) {
if (error.name === 'AbortError') {
console.error(`Attempt ${attempt}: Request timeout`);
} else {
console.error(`Attempt ${attempt}: ${error.message}`);
}
if (attempt === maxRetries) {
throw new Error(ERROR_CODES.PORTABILITY_CHECK_FAILED);
}
}
}
}This example handles validation errors gracefully with internationalization support, retry logic for network calls, and timeout handling. Specific error codes and messages guide users toward correcting their input and improve application usability.
Slovenia Mobile Network Infrastructure
Network Architecture Overview
Slovenia operates a modern telecommunications network that blends legacy systems with cutting-edge technology. The network architecture follows a hierarchical model for efficient nationwide communication:
- Core Network (Backbone): High-capacity fiber backbone connecting major cities and international gateways, operated primarily by Telekom Slovenije
- Regional Distribution Centers: Secondary hubs in Ljubljana, Maribor, Celje, Kranj, Koper, and Novo Mesto
- Local Exchange Points: Metropolitan Area Networks (MANs) serving specific geographic regions
- Last Mile Connectivity: Fiber-to-the-Home (FTTH), DSL, cable, and fixed wireless access (4G/5G)
Use this structure when troubleshooting connectivity issues or optimizing performance. SMS messages route through operator SMSC (Short Message Service Center) servers in the core network.
5G Implementation: Driving Innovation
Slovenia made significant strides in 5G deployment across all major operators. Telekom Slovenije launched 5G in 2020 with initial 32% population coverage in major cities, while A1 and Telemach followed with 5G launches in 2021. As of 2025, A1 Slovenija offers the widest 2G, 3G, 4G, and 5G coverage nationwide, with all three major operators providing comprehensive 5G services in urban areas.
5G Performance Metrics (2025):
- Telemach: Fastest 5G download speeds at 302.5 Mbps, with upload speeds of 31.8 Mbps
- A1 Slovenia: 5G download speeds of 204.2 Mbps, with upload speeds around 26.2 Mbps
- Telekom Slovenije: 5G download speeds of 108.6 Mbps, with upload speeds around 22.8 Mbps
This rollout uses 700 MHz, 3.6 GHz, and 26 GHz frequency bands. In June 2024, T-2 signed a five-year national mobile roaming deal with A1 Slovenija, granting T-2 subscribers access to Slovenia's premier 5G network with download speeds peaking at 1 Gbps and upload rates up to 100 Mbps. In March 2024, Telemach Slovenia launched the 5G-ADRIA project with Telemach Croatia, DARS, and the University of Ljubljana to enhance 5G infrastructure for traffic management.
Widespread 5G availability enables applications that leverage high speed and low latency. Leverage 5G when designing applications with real-time communication or data-intensive operations.
Integration Considerations: Connecting with Slovenian Telecom Systems
Integrating with Slovenian telecom systems requires careful consideration to ensure smooth operation, regulatory compliance, and optimal performance.
- Number Portability Checks: Number portability allows users to switch operators while keeping their number (active since 2006). Implement lookups to verify the current operator. The official AKOS numbering space registry provides data on assigned number blocks.
Note: As of 2025, AKOS does not provide a public real-time portability API. For SMS delivery and operator routing, work with your messaging provider (Twilio, MessageBird, etc.) who maintain commercial portability databases, or implement manual lookups through the AKOS registry. Caching portability results with a TTL of 7-30 days balances accuracy and performance. For critical applications, verify portability status before each SMS send.
// Example portability check implementation (conceptual)
async function checkOperator(phoneNumber) {
const e164 = toE164(phoneNumber);
// Check cache first (7-day TTL recommended)
const cached = await cache.get(`operator:${e164}`);
if (cached && Date.now() - cached.timestamp < 7 * 24 * 60 * 60 * 1000) {
return cached.operator;
}
// Query AKOS registry or use SMS provider's lookup service
// Example: Twilio Lookup API
try {
const result = await twilioClient.lookups.v2
.phoneNumbers(e164)
.fetch({ fields: 'line_type_intelligence' });
const operator = result.lineTypeIntelligence?.carrier_name || 'Unknown';
// Cache result
await cache.set(`operator:${e164}`, {
operator,
timestamp: Date.now()
});
return operator;
} catch (error) {
console.error('Operator lookup failed:', error);
// Fallback to prefix-based guess (unreliable due to portability)
return guessOperatorFromPrefix(phoneNumber);
}
}- Compliance Requirements: Adhere to all relevant regulations, including GDPR for data handling. Slovenia implements EU GDPR through the Slovenian Data Protection Act (ZVOP-2, effective 26 January 2023).
GDPR Requirements for Phone Number Processing:
- Legal Basis: Obtain explicit consent or establish legitimate interest before collecting phone numbers (GDPR Article 6)
- Purpose Limitation: Clearly specify why you're collecting phone numbers (authentication, communication, marketing)
- Data Minimization: Only collect phone numbers if necessary for your service
- Consent Management: Allow users to withdraw consent at any time; provide clear opt-in for marketing communications
- Retention Limits: Delete phone numbers when no longer needed or upon user request (GDPR Article 17 "Right to Erasure")
- Security: Encrypt phone numbers in storage; implement access controls and audit logging (GDPR Article 32)
- International Transfers: If transferring phone data outside EU/EEA, ensure adequate safeguards (Standard Contractual Clauses)
- Breach Notification: Report data breaches involving phone numbers to Slovenian Information Commissioner within 72 hours
Storage Best Practices:
// Always store in E.164 format for consistency
const secureStorage = {
async storePhoneNumber(userId, phoneNumber, consent) {
const e164 = toE164(phoneNumber);
const encrypted = await encrypt(e164); // Use AES-256 or similar
await db.phoneNumbers.insert({
user_id: userId,
phone_number_hash: hash(e164), // For lookup without decryption
phone_number_encrypted: encrypted,
consent_given: consent.marketing || false,
consent_timestamp: new Date(),
created_at: new Date(),
purpose: 'authentication' // Document purpose
});
// Audit log
await db.auditLog.insert({
user_id: userId,
action: 'phone_number_stored',
timestamp: new Date()
});
}
};- Performance Optimization: Optimize performance by using bulk validation for large datasets, implementing rate limiting for API calls, and using local caching strategies. These optimizations significantly improve responsiveness and scalability.
Performance Recommendations:
- Caching TTLs: Operator portability (7-30 days), validation rules (90 days), AKOS numbering plan updates (30 days)
- Database Indexing: Create indexes on phone number columns (use hashed values for encrypted storage)
sql
CREATE INDEX idx_phone_hash ON users(phone_number_hash); CREATE INDEX idx_phone_country ON users(country_code, phone_number_hash); - Bulk Validation: Process 1000+ numbers per batch; use regex validation first, then libphonenumber for edge cases
- Rate Limiting: Limit portability checks to 10-50 requests/second to avoid overwhelming external APIs
- Benchmarks: Regex validation ~50-100μs, libphonenumber ~200-500μs, portability lookup ~50-200ms (with caching ~1-5ms)
Warning: Numbering plans can change. Subscribe to AKOS news for updates and regularly review your validation rules.
Troubleshooting Common Issues
Anticipate common issues and provide solutions for quick resolution. This proactive approach significantly improves user satisfaction.
| Issue | Possible Cause | Solution | Diagnostic Steps |
|---|---|---|---|
| Invalid Format | Missing country code | Normalize to E.164 format | Verify input contains +386 or leading 0 |
| Portability Failure | Outdated cache | Refresh operator data from AKOS or messaging provider | Check cache age; force refresh if >30 days |
| Validation Error | Incorrect regex | Update pattern matching to current AKOS numbering plan | Test against known valid numbers |
| Network Issues | Carrier outage | Check carrier status and inform user | Monitor operator status pages |
| SMS Delivery Failure | Wrong operator routing | Perform portability lookup before sending | Verify MCC/MNC matches current operator |
| Character Encoding Issues | Non-GSM characters in SMS | Use GSM 7-bit alphabet or UCS-2 for Unicode | Detect characters; warn if exceeding 160/70 chars |
| International Routing Problems | Incorrect country code | Validate +386 prefix; reject invalid codes | Check E.164 format compliance |
| Database Query Slow | Missing index on phone column | Add index on phone_number_hash | Run EXPLAIN query; add composite indexes |
Frequently Asked Questions
What is the country code for Slovenia phone numbers?
The country code for Slovenia is +386. When dialing Slovenian numbers internationally, prefix the number with +386 (or 00386 from most European countries, or 011 386 from North America). For example, a mobile number 064 123 456 becomes +386 64 123 456 in international format. Slovenia also uses ISO code SI (alpha-2) and Mobile Country Code (MCC) 293 for telecommunications systems. Source: ITU National Numbering Plan.
How do I validate a Slovenian mobile number?
Validate Slovenian mobile numbers using this pattern: they must start with +386 (or 0 locally), followed by 6, then a digit from 4 to 9, and finally 6 more digits. The complete format is +386 6[4-9]XXXXXX or 06[4-9]XXXXXX locally. Use the regex pattern /^(?:\+386|0)?6[4-9]\d{6}$/ for validation in your code. For production applications, use Google's libphonenumber library for comprehensive validation including length checking and carrier detection. Handle number portability by checking with your messaging provider or AKOS, as users can switch operators while keeping their numbers (portability active since 2006).
What are the area codes for major Slovenian cities?
Slovenia's geographic numbers use area codes based on regional zones as defined by AKOS. The complete area codes are: 01 for Ljubljana region, 02 for Maribor, Ravne na Koroškem, and Murska Sobota, 03 for Celje and Trbovlje, 04 for Kranj, 05 for Nova Gorica, Koper, and Postojna, and 07 for Novo Mesto and Krško. Area code 06 is reserved for mobile networks. Geographic numbers follow the format 0[1-7][2-8]XXXXXX in national format or +386 [1-7]XXXXXXX in international format (8 digits after country code). Source: ITU National Numbering Plan.
Which mobile operators serve Slovenia?
Slovenia has four major mobile operators with the following MNC codes and prefixes (source: ITU Mobile Network Codes):
- A1 Slovenia (MNC 40, 20): Prefixes 030, 040, 068, 069. Widest nationwide coverage. Includes Bob, HoT (Hofer Telekom), Ventocom.
- Telekom Slovenije (MNC 41): Prefixes 031, 041, 051, 065. Launched 5G in 2020. Includes Izimobil, Spar Mobil, Hip Mobil.
- Telemach (MNC 70): Prefixes 070, 071. Fastest 5G speeds at 302.5 Mbps as of 2025.
- T-2 (MNC 64): Prefix 064. Uses A1 network via roaming agreement (1 Gbps peak speeds).
All mobile numbers start with 06 in national format (6 after country code). All operators support SMS/MMS services and number portability (active since 2006), meaning prefixes no longer reliably indicate current operator.
How do I format Slovenian phone numbers in E.164 format?
Convert Slovenian phone numbers to E.164 format by: (1) removing all non-digit characters (spaces, parentheses, hyphens), (2) if the number starts with 0 (national format), replace with +386, (3) if the number lacks country code, prepend +386. For example: "064 123 456" becomes "+38664123456" (storage format) or "+386 64 123 456" (display format), "01 234 5678" becomes "+38612345678" (storage) or "+386 1 234 5678" (display). Store all numbers in E.164 format without spaces in databases for international compatibility and consistent indexing. Use libphonenumber's format(PNF.E164) method for automatic conversion. Source: E.164 Standard.
What is Slovenia's 5G network coverage like in 2025?
As of 2025, all major Slovenian operators provide comprehensive 5G coverage in urban areas. Telemach offers the fastest 5G download speeds at 302.5 Mbps (upload 31.8 Mbps), A1 Slovenia provides the widest nationwide coverage with speeds of 204.2 Mbps (upload 26.2 Mbps), and Telekom Slovenije delivers speeds of 108.6 Mbps (upload 22.8 Mbps). The networks utilize 700 MHz, 3.6 GHz, and 26 GHz frequency bands. T-2 subscribers access A1's 5G network through a roaming agreement with speeds up to 1 Gbps. 5G is available in all major cities including Ljubljana, Maribor, Celje, Kranj, Koper, and Novo Mesto, with expansion to rural areas ongoing.
What is AKOS and why is it important for phone number validation?
AKOS (Agencija za komunikacijska omrežja in storitve Republike Slovenije / Agency for Communication Networks and Services of the Republic of Slovenia) is Slovenia's telecommunications regulator, established under the Electronic Communications Act (ZEKom-2). AKOS manages the national numbering plan, oversees number portability, assigns numbering blocks to operators, and maintains the official numbering space registry. Reference AKOS resources for authoritative numbering plan data and subscribe to AKOS news for updates. AKOS publishes annual analyses of numbering space allocation and depletion risk assessments. For portability checks, AKOS provides routing codes (98MN series) but does not currently offer a public API—use commercial messaging providers for real-time portability lookups.
Future Considerations: Staying Ahead of the Curve
The Slovenian telecommunications landscape constantly evolves. Stay informed about upcoming changes to keep your application compatible and current. Monitor early-stage discussions about 6G planning (expected post-2030), number format evolution as numbering blocks approach exhaustion, and AKOS API modernization. Staying current enables proactive adaptation and competitive advantage.
Resources to Monitor:
- AKOS News Feed – Official regulatory updates
- AKOS Annual Numbering Space Analysis – Published by 31 March each year per ZEKom-2 Article 98(4)
- ITU Operational Bulletins – International numbering plan changes
- BEREC (Body of European Regulators for Electronic Communications) – EU-wide telecom policy developments
- AKOS contact for inquiries: info.box@akos-rs.si, +386 (0)1 583 63 00
Conclusion
You now have comprehensive knowledge of Slovenian phone numbers. Follow the guidelines and best practices in this guide to confidently integrate these numbers into your applications and ensure seamless communication with Slovenian users. Prioritize data integrity, user experience, and regulatory compliance.
Quick Implementation Checklist:
- ✅ Use libphonenumber for validation (or custom regex for performance-critical applications)
- ✅ Store all numbers in E.164 format (
+386XXXXXXXXwithout spaces) - ✅ Implement GDPR-compliant consent management and data retention policies
- ✅ Handle number portability with cache-based operator lookups (7-30 day TTL)
- ✅ Validate against current AKOS numbering plan
- ✅ Support both national (0XX XXX XXX) and international (+386 XX XXX XXX) display formats
- ✅ Include emergency numbers (112, 113) and special services (116XXX) in your validation logic
- ✅ Monitor AKOS news for numbering plan updates
- ✅ Implement proper error handling with user-friendly messages (support Slovenian localization)
- ✅ Index phone number columns in databases (use hashed values for encrypted storage)
Additional Resources:
- Google libphonenumber – Comprehensive phone validation library
- AKOS Numbering Space Registry – Official operator assignments
- E.164 Format Guide – International numbering standard
- GDPR Text (Official) – EU data protection regulation
- Slovenian ZVOP-2 – Slovenia's data protection act