phone number standards

Sent logo
Sent TeamMar 8, 2026 / phone number standards / Article

Malta Phone Number Format: Complete +356 Validation Guide (2025)

Complete Malta phone number format guide: +356 country code, 8-digit validation patterns, mobile vs landline prefixes (79, 99, 2x), and E.164 compliance with code examples.

Malta Phone Numbers: Format, Area Code & Validation Guide

Introduction

Malta phone numbers follow a straightforward 8-digit format with the +356 country code. Whether you're building a contact form, implementing SMS delivery, or setting up international calling, understanding Malta's phone number format is essential for proper validation and user experience.

Developers commonly face challenges such as handling legacy 6-digit and 7-digit formats from pre-2002 systems, validating international format variations (00356 vs. +356), distinguishing between mobile (79, 99) and geographic (2x) prefixes, and integrating with SMS/voice APIs that require strict E.164 compliance. This guide provides a deep dive into Malta's phone number system, equipping you with the knowledge and tools to implement accurate validation, formatting, and dialing procedures.

What is the Malta Phone Number Format?

Malta's phone numbers follow the international E.164 standard – a crucial detail for global interoperability. This standard, overseen by the International Telecommunication Union (ITU), ensures consistent formatting for international calls and facilitates seamless communication across borders. The Malta Communications Authority (MCA) guidelines specify that all Maltese numbers consist of 8 digits preceded by the country code +356. This simplified structure, adopted in 2001–2002, replaced the older 6-digit landline and 7-digit mobile formats, creating a unified system. Keep this history in mind when dealing with legacy data.

Malta Landline Number Prefixes (Geographic Numbers)

Malta's geographic numbers (landlines) use 2-digit prefixes in the 2x range. Common prefixes include:

  • 21: GO fixed-line numbers (primary landline prefix)
  • 27: Melita fixed-line numbers
  • 22: Valletta, Ħamrun, Marsa area
  • 23: Floriana, Ħamrun area
  • 24: Pietà area
  • 25: Marsa area
  • 33, 34: Sliema, Gżira, Msida area
  • 37, 38: San Ġiljan, San Ġwann, Pembroke area
  • 41, 42: Mosta, Attard, Naxxar, Għargħur area
  • 44, 48, 49: Qormi, Birkirkara, Balzan area
  • 45: Mdina, Rabat, Dingli area
  • 55, 56: Gozo (Malta's sister island)
  • 63: Marsaskala area
  • 66, 80: Żejtun, Paola, Vittoriosa area

All geographic numbers follow the format 2[0-9]XXXXXX (8 digits total).

Example Malta landline number: +356 21234567

Malta Mobile Number Prefixes

Malta mobile phone numbers use two primary prefixes:

  • 79: Mobile numbers (primarily GO Mobile)
  • 99: Mobile numbers (Vodafone Malta and other operators)

All mobile numbers follow the format 79XXXXXX or 99XXXXXX (8 digits total).

Example Malta mobile number: +356 79123456 or +356 99123456

Special Service Number Ranges

Beyond standard geographic and mobile numbers, Malta allocates specific ranges for special services:

  • 77: Previously used for mobile services, now part of the mobile numbering pool
  • 70, 71: Legacy pager numbers (pre-2002, converted to 7117XXXX format)
  • 217: Mailbox services (converted from legacy 07 prefix in 2002)
  • 800: Toll-free (freephone) services
  • 50, 51: Premium rate services
  • 112: Emergency services (EU-wide standard)
  • 1182: Directory assistance

Note that legacy services using 70x and 71x prefixes have been migrated to other ranges or discontinued. Modern applications should not expect these legacy formats in active use.

How to Validate Malta Phone Numbers: Step-by-Step Guide

Validate phone numbers to ensure data integrity and improve your user experience. Follow these practical steps:

1. Cleaning and Normalization

Normalize your input to a consistent format before validation. This handles variations in user input, such as spaces, hyphens, and parentheses. Security Note: Proper normalization is critical to prevent injection attacks. By removing all non-digit characters except the + prefix and validating against strict patterns, you prevent malicious input from being interpolated into SQL queries, system commands, or API calls. Never directly concatenate unsanitized phone number input into database queries or shell commands.

javascript
/**
 * Normalizes phone numbers to a consistent format.
 * Removes non-digit characters and ensures the +356 prefix.
 * SECURITY: This function sanitizes input to prevent injection attacks.
 */
function normalizePhoneNumber(number) {
  // Remove all non-essential characters (security: whitelist approach)
  const cleaned = number.replace(/[^\d+]/g, '');

  // Handle international format and missing country code
  const normalized = cleaned.startsWith('+356')
    ? cleaned
    : cleaned.startsWith('00356')
      ? `+${cleaned.slice(2)}` // Handle 00356 prefix
      : cleaned.startsWith('356')
        ? `+${cleaned}`
        : `+356${cleaned}`;

  return {
    normalized,
    originalLength: cleaned.length
  };
}

This normalization function removes non-digit characters and handles cases where users input "00356" or just "356" instead of "+356," ensuring consistency.

2. Format Detection and Pattern Matching

Apply pattern matching using regular expressions with your normalized number. Each regex pattern uses specific components:

  • ^ and $: Match start and end of string (prevents partial matches)
  • (?:\+356)?: Optional non-capturing group for country code
  • \d{6}: Matches exactly 6 digits
  • (?:79|99): Non-capturing group matching either 79 or 99
  • 2[0-9]: Matches 2 followed by any digit 0-9
javascript
const maltaPhoneRegex = {
  // Geographic numbers (landlines) – 2-digit prefixes like 21, 22, 27, 41
  geographic: /^(?:\+356)?2[0-9]\d{6}$/,

  // Mobile numbers (79 and 99 prefixes)
  mobile: /^(?:\+356)?(?:79|99)\d{6}$/,

  // Toll-free services (800 prefix)
  tollFree: /^(?:\+356)?800\d{5}$/,

  // Premium rate services (50 or 51 prefix)
  premiumRate: /^(?:\+356)?5[01]\d{6}$/,

  // Emergency and special services (short codes)
  emergency: /^112$/,
  directory: /^1182$/
};

/**
 * Detects the type of phone service based on number pattern.
 * Returns detailed validation information.
 */
function detectNumberType(number) {
  const cleaned = normalizePhoneNumber(number).normalized;

  for (const [type, regex] of Object.entries(maltaPhoneRegex)) {
    if (regex.test(cleaned)) {
      return {
        type,
        isValid: true,
        format: type === 'emergency' || type === 'directory' ? 'special' : 'standard'
      };
    }
  }

  return {
    type: 'invalid',
    isValid: false,
    error: 'Unknown number format'
  };
}
Number TypePrefixExampleUse Case
Geographic21, 27, 2x+35621234567Landline businesses, homes
Mobile79, 99+35679123456Mobile phones, SMS delivery
Toll-free800+35680012345Customer service lines
Premium rate50, 51+35650123456Paid services, voting lines
Emergency112112Emergency services
Directory11821182Directory assistance

This function categorizes emergency and directory numbers as "special" formats, providing granular information.

3. Comprehensive Error Handling

Provide detailed error feedback to guide users.

javascript
function validateWithDetailedError(number) {
  if (!number) {
    return { valid: false, error: 'Number is required', code: 'EMPTY_INPUT' };
  }

  const { normalized, originalLength } = normalizePhoneNumber(number);

  // Check length requirements after normalization
  if (normalized.length !== 12) { // +356 plus 8 digits
    return {
      valid: false,
      error: `Invalid number length. Expected 8 digits after the country code, but got ${originalLength}.`,
      code: 'INVALID_LENGTH'
    };
  }

  const typeCheck = detectNumberType(normalized);
  if (!typeCheck.isValid) {
    return { valid: false, error: typeCheck.error, code: 'INVALID_FORMAT' };
  }

  return { valid: true, type: typeCheck.type, normalized };
}

This error handling function checks the length after normalization, providing accurate error messages and accounting for discrepancies introduced during the cleaning process.

4. Testing Your Validation

Test thoroughly. Consider edge cases and invalid formats. Test Coverage Guidelines: Aim for 100% branch coverage of your validation logic. At a minimum, test:

  • All valid number types (geographic, mobile, toll-free, premium)
  • All three prefix variations (00356, +356, 356)
  • Both boundary conditions (too short, too long)
  • Invalid prefixes within valid lengths
  • Null/empty inputs
  • Special characters and formatting variations
javascript
const validationTests = [
  // Valid geographic numbers
  { input: '+35621234567', expected: { valid: true, type: 'geographic' } },
  { input: '21234567', expected: { valid: true, type: 'geographic' } },

  // Valid mobile numbers
  { input: '+35679123456', expected: { valid: true, type: 'mobile' } },
  { input: '+35699123456', expected: { valid: true, type: 'mobile' } },

  // Valid toll-free
  { input: '+35680012345', expected: { valid: true, type: 'tollFree' } },

  // Valid premium rate
  { input: '+35650123456', expected: { valid: true, type: 'premiumRate' } },
  { input: '+35651123456', expected: { valid: true, type: 'premiumRate' } },

  // Edge cases and invalid formats
  { input: '+35622345678', expected: { valid: false, code: 'INVALID_FORMAT' } },
  { input: '0035621234567', expected: { valid: true, type: 'geographic' } }, // Test 00356 prefix
  { input: '35679123456', expected: { valid: true, type: 'mobile' } }, // Test 356 prefix
  { input: '2123456', expected: { valid: false, code: 'INVALID_LENGTH' } }, // Too short
  { input: '+3562123456789', expected: { valid: false, code: 'INVALID_LENGTH' } }, // Too long
];

These tests cover the "00356" and "356" prefixes, plus numbers that are too short or too long, ensuring comprehensive coverage.

Validation Pipeline Summary:

  1. Normalize – Remove formatting, add country code if missing
  2. Validate Length – Check for exactly 12 characters (+356 + 8 digits)
  3. Pattern Match – Determine number type via regex
  4. Return Result – Provide normalized number or specific error code

Use Step 1 for all user input, Steps 2–3 for form validation, and Step 4 for API integration where you need to reject invalid numbers before processing.

How to Call Malta: International Dialing Instructions

Understand how calls route within Malta and internationally.

Calling Within Malta (Domestic)

For calls within Malta, simply dial the 8-digit number directly—no area codes or prefixes needed. Malta does not use area codes for domestic dialing.

Example: To call 21234567, just dial those 8 digits.

How to Call Malta from Abroad (International)

To call Malta from another country, dial: [Exit Code] + 356 + [8-digit number]

The exit code (also called IDD prefix) varies by country:

Calling FromExit CodeFormat Example
United States / Canada011011-356-79123456
United Kingdom / EU0000-356-79123456
Australia00110011-356-79123456
Japan010010-356-79123456
China0000-356-79123456

Example from USA: 011-356-79123456 (to call a Malta mobile number) Example from UK: 00-356-21234567 (to call a Malta landline)

The plus sign (+) in international format signifies the exit code. When storing numbers in databases or applications, always use the E.164 format: +356XXXXXXXX.

Carrier Selection: Malta uses 00 as the international exit code. Some carriers may support carrier selection codes (e.g., 00xx where xx is a carrier code), but this is not commonly required for consumer calls. International Direct Dial (IDD) rates vary by origin country and carrier – consult your telecommunications provider for current rates.

VoIP and Internet-Based Calling

VoIP services to Malta are widely supported and regulated by the MCA's VoIP framework. When you implement VoIP calling:

  • Ensure your VoIP provider supports E.164 format for international termination.
  • Some VoIP services may handle the +356 prefix automatically. Test with and without the prefix.
  • VoIP calls to Malta emergency services (112) may not route correctly. Verify with your provider.
  • For business applications, consider using SIP trunking providers with direct Malta interconnects for better call quality and lower latency.

Best Practices and Additional Considerations

Follow these best practices when working with Maltese phone numbers:

  • Regularly update your validation rules: The MCA may update its numbering plan. Stay informed to avoid validation errors. Subscribe to MCA announcements or implement periodic checks of their website (https://www.mca.org.mt). The MCA's National Numbering Plan Allocations matrix is updated in real-time.
  • Log validation failures: Analyze these logs to reveal patterns of invalid input and refine your validation logic.
  • Consider using a dedicated phone number validation library: This simplifies implementation and ensures you follow best practices. Services like Twilio's Lookup API offer robust validation and formatting capabilities. This helps with edge cases and international variations.

Security Best Practices

Phone numbers are personal data under the General Data Protection Regulation (GDPR) (GDPR Article 4). Organizations processing Malta phone numbers must comply with the EU GDPR:

  • Storage: Encrypt phone numbers at rest using AES-256 or equivalent. Store them in dedicated fields with appropriate access controls.
  • Transmission: Use TLS 1.2+ for all API calls transmitting phone numbers. Never send phone numbers in URL parameters or log files.
  • Retention: Implement data retention policies. Delete phone numbers when they're no longer needed for the original purpose.
  • User Rights: Support GDPR rights, including access, rectification, erasure, and portability of phone number data.
  • Legal Basis: Document your lawful basis for processing (consent, contract, legitimate interest) as required by GDPR Article 6.

Malta's Information and Data Protection Commissioner enforces GDPR compliance. Non-compliance can result in fines up to €20 million or 4% of global annual revenue.

Additional Security Measures:

  • Validate phone numbers server-side. Never rely solely on client-side validation.
  • Implement rate limiting on phone number input fields to prevent enumeration attacks.
  • Mask phone numbers in the UI (e.g., +356 79XX XX56) except when the full number is required.
  • Use prepared statements or parameterized queries when storing phone numbers in databases.

Legacy Format Migration

Before 2002, Malta used shorter number formats. If your application might encounter older data, accommodate these legacy formats.

Legacy Format Conversion Table:

Legacy FormatModern EquivalentConversion Rule
6-digit landline (21xxxx)+35621xxxxxxPrefix with +3562
7-digit mobile (9xxxxxx)+35699xxxxxxReplace 9 with 99
7-digit mobile (09xxxxx)+35679xxxxx or +35699xxxxxReplace 09 with 79 or 99*
Mailbox (07xxxxx)+356217xxxxxReplace 07 with 217
Pager (70/71xxxx)+3567117xxxxReplace 70/71 with 7117

*During the 2001–2002 transition, mobile numbers with the "09" prefix were split between 79 (GO Mobile) and 99 (Vodafone Malta) based on the original carrier. Without carrier information, you cannot reliably convert legacy 09 numbers.

javascript
function convertLegacyFormat(number, carrier = null) {
  const cleaned = number.replace(/[^\d]/g, '');

  // 6-digit landline
  if (cleaned.length === 6 && cleaned.startsWith('2')) {
    return `+3562${cleaned}`;
  }

  // 7-digit mobile with 9 prefix
  if (cleaned.length === 7 && cleaned.startsWith('9')) {
    return `+35699${cleaned.slice(1)}`;
  }

  // 8-digit mobile with 09 prefix (ambiguous without carrier info)
  if (cleaned.length === 8 && cleaned.startsWith('09')) {
    const prefix = carrier === 'GO' ? '79' : '99';
    return `+356${prefix}${cleaned.slice(2)}`;
  }

  // Already modern format or unrecognized
  return normalizePhoneNumber(number).normalized;
}

Frequently Asked Questions: Malta Phone Numbers

What is Malta's country code?

Malta's international calling code is +356. This country code must be dialed before the 8-digit local number when calling Malta from abroad. From the US, dial 011-356-XXXXXXXX; from Europe, dial 00-356-XXXXXXXX.

How many digits is a Malta phone number?

All Malta phone numbers have 8 digits after the country code. In full international format, a Malta number is written as +356 XXXX XXXX (12 characters including the + and country code). This consistent 8-digit format applies to both landlines and mobile numbers.

What are Malta mobile number prefixes?

Malta mobile phone numbers start with either 79 or 99:

  • 79XXXXXX: Primarily GO Mobile numbers
  • 99XXXXXX: Vodafone Malta and other operators

These prefixes replaced the older "09" format during Malta's 2001–2002 numbering reform. Any number starting with 79 or 99 is a mobile number.

How do I validate Malta phone numbers with regex?

Use these regular expression patterns for Malta phone number validation:

regex
# Mobile numbers (79 or 99 prefix)
/^\+356(?:79|99)\d{6}$/

# Landline numbers (2x prefix)
/^\+3562[0-9]\d{6}$/

# Toll-free numbers (800 prefix)
/^\+356800\d{5}$/

# Any valid Malta number
/^\+356[0-9]{8}$/

These patterns enforce the E.164 international format with the +356 country code for maximum compatibility with SMS/voice APIs.

Does Malta have area codes?

No, Malta does not use area codes. Since the 2001–2002 numbering reform, Malta uses a unified 8-digit system. You simply dial the full 8-digit number for any domestic call—no area code needed.

While geographic prefixes (21, 27, 55, etc.) historically corresponded to specific regions, they're part of the number itself, not separate area codes. This makes dialing within Malta straightforward: just 8 digits for every call.

What format should I use to store Malta phone numbers in my database?

Store Malta phone numbers in E.164 format (+356XXXXXXXX) for maximum compatibility. This international standard ensures your numbers work correctly with SMS APIs, voice services, WhatsApp Business API, and global telecommunications systems. Store them as VARCHAR(13) or TEXT to accommodate the + symbol and 12 characters. Encrypt the field at rest and apply appropriate GDPR data protection measures.

Can I port my phone number between carriers in Malta?

Yes, Malta supports number portability for both mobile and fixed-line numbers. The process is regulated by the MCA and typically completes within one business day. When you implement systems that rely on carrier identification from prefixes, note that ported numbers retain their original prefix but may be serviced by a different carrier.

How do dual SIM phones work with Malta numbers?

Dual SIM phones can use two Malta numbers simultaneously (or one Malta number and one from another country). When you implement click-to-call or SMS functionality, detect the user's preferred SIM for Malta numbers. On web applications, use the tel: URI scheme, which allows the operating system to prompt for SIM selection: <a href="tel:+35679123456">Call</a>.

Conclusion

This comprehensive guide equips you with the knowledge and tools to handle Maltese phone numbers in your applications. You've learned how to validate numbers against Malta's 8-digit E.164 format, distinguish between number types (geographic, mobile, toll-free, premium), handle legacy formats from pre-2002 systems, implement security best practices including GDPR compliance, and integrate with international dialing and VoIP services.

Next Steps:

  1. Implement the validation functions in your application.
  2. Test with the provided test cases and add your own edge cases.
  3. Review your GDPR compliance for phone number storage and processing.
  4. Set up monitoring for validation failures to catch emerging patterns.
  5. Subscribe to MCA announcements for numbering plan updates.

Related Topics:

Accurate phone number handling is crucial for any application interacting with users in Malta. Follow the outlined best practices and stay informed about potential updates to ensure accurate validation, seamless communication, and a positive user experience.