phone number standards
phone number standards
Guadeloupe Phone Numbers: Format, Area Code & Validation Guide
Complete guide for developers on Guadeloupe phone number formatting, validation, portability, and telecom API integration with country code +590.
Guadeloupe Phone Numbers: Format, Area Code & Validation Guide
This comprehensive guide covers everything developers and system administrators need to know about Guadeloupe's phone number system. Learn how to format, validate, and store Guadeloupe phone numbers with country code +590, implement number portability checks, handle international dialing, and integrate telecom APIs for production applications.
Background
Guadeloupe, a French overseas territory, operates a telecommunications system under ARCEP (Autorité de Régulation des Communications électroniques et des Postes), France's telecom regulatory authority. The system follows French regulations with Caribbean-specific adaptations. The infrastructure has modernized significantly, especially in mobile networks, with expanding 4G LTE and 5G coverage. Four main operators – Orange, Digicel, Free Caraïbe, and Outremer Telecom – compete in the market. Number portability lets users switch carriers while keeping their numbers.
Operator Comparison
| Operator | Network Type | Coverage Focus | Notable Services |
|---|---|---|---|
| Orange | Mobile/Fixed | Nationwide | 5G, fiber optic |
| Digicel | Mobile | Islands-wide | Regional roaming |
| Free Caraïbe | Mobile/Fixed | Urban centers | Competitive pricing |
| Outremer Telecom | Fixed | Business sector | Enterprise solutions |
Guadeloupe Phone Number Formats
Understand Guadeloupe's phone number structure for proper handling and validation in your applications.
Structure Breakdown
Numbers follow a predictable pattern:
- International Format:
+590 XXX XX XX XX(Example: +590 690 12 34 56) - National Format:
0XXX XX XX XX(Example: 0690 12 34 56)
Best Practice: Store phone numbers in E.164 international format (+590) for maximum compatibility and to avoid ambiguity. This simplifies integration with international systems and reduces dialing errors.
Number Types
| Number Type | Format | Example | Usage Context |
|---|---|---|---|
| Landline | +590 590 XX XX XX | +590 590 27 12 34 | Fixed location services |
| Mobile | +590 690 XX XX XX | +590 690 12 34 56 | Mobile services |
| Toll-Free | +590 800 XX XX XX | +590 800 12 34 56 | Free calls for the caller |
| Premium Rate | +590 89X XX XX XX | +590 891 23 45 67 | Services with higher charges |
How to Dial Guadeloupe Phone Numbers
Domestic Calls
Dial within Guadeloupe using this pattern:
- Dial
0(national prefix) - Dial the 9-digit local number
Examples:
- Mobile to mobile:
0690 12 34 56 - Landline to landline:
0590 27 12 34 - Mobile to landline:
0590 27 12 34
Guadeloupe uses nationwide numbering – no area codes within the territory.
International Calls
- Outbound from Guadeloupe: Dial
00+ country code + number - Inbound to Guadeloupe: Dial
+590+ local number (omit the leading0)
Key Point: Always omit the leading 0 when you dial a Guadeloupe number from outside the country.
Common Dialing Errors
| Error | Symptom | Solution |
|---|---|---|
Keeping the 0 prefix | Call fails internationally | Use +590 690… not +590 0690… |
Missing +590 | Invalid number format | Add country code for all international storage |
Using 00 domestically | Call routing issues | Use 0 prefix for domestic calls only |
| Wrong carrier prefix | Call doesn't connect | Verify number type (590 for landline, 690 for mobile) |
Phone Number Validation
Implement robust phone number validation to ensure data integrity. Use regular expressions to validate Guadeloupe number formats:
const validateGuadeloupeNumber = (number) => {
// Remove whitespace, dashes, parentheses
const cleanedNumber = number.replace(/[\s\-()]/g, '');
const regex = /^\+590(590|690|800|89\d)\d{6}$/;
return regex.test(cleanedNumber);
};
// Example usage
console.log(validateGuadeloupeNumber('+590 690 12 34 56')); // true
console.log(validateGuadeloupeNumber('0690123456')); // false (missing +590)This regex validates all standard number formats and handles common input variations (spaces, dashes, parentheses).
Error Handling
Provide clear, actionable feedback for invalid numbers:
function validateWithFeedback(number) {
const cleaned = number.replace(/[\s\-()]/g, '');
if (!cleaned.startsWith('+590')) {
return { valid: false, error: 'Number must start with +590. Example: +590 690 12 34 56' };
}
if (cleaned.length !== 13) {
return { valid: false, error: `Number must be 13 digits (including +590). You entered ${cleaned.length} digits.` };
}
const prefix = cleaned.substring(4, 7);
const validPrefixes = ['590', '690', '800', '890', '891', '892', '893', '894', '895', '896', '897', '898', '899'];
if (!validPrefixes.includes(prefix)) {
return { valid: false, error: `Invalid prefix ${prefix}. Use 590 (landline), 690 (mobile), 800 (toll-free), or 89X (premium).` };
}
return { valid: true };
}Number Portability
Guadeloupe follows French regulations for number portability. The process completes within 10 business days maximum. Key features:
- Universal Coverage: Both landline and mobile numbers are portable
- Automated Validation: Real-time systems prevent unauthorized transfers
- Service Continuity: Operators synchronize to minimize downtime
Porting Process
From a user perspective:
- Contact your new carrier with your current number and account details
- Provide authorization and identification (RIO code from current carrier)
- New carrier initiates the port request
- Wait 3–10 business days for completion
- Receive confirmation when the port is active
Requirements:
- Active account with current carrier (no outstanding debts)
- Valid identification matching account holder name
- RIO (Relevé d'Identité Opérateur) code from current carrier
- No porting restrictions (typically 90 days between ports)
Costs: Free for users – new carrier may charge activation fees, but porting itself has no regulatory fees.
Developer Integration
Integrate with portability check APIs to verify number eligibility and status:
async function checkPortability(number) {
try {
const response = await fetch(`/api/v1/portability/check`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ phone_number: number })
});
if (response.status === 429) {
throw new Error('Rate limit exceeded. Try again in 60 seconds.');
}
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Portability check failed:', error);
throw error;
}
}Implementation Note: Replace /api/v1/portability/check and API_TOKEN with your specific API endpoint and authentication token.
API Response Format
Success (200):
{
"phone_number": "+590690123456",
"portable": true,
"current_carrier": "Orange",
"number_type": "mobile",
"last_ported": "2024-08-15T10:30:00Z",
"restrictions": null
}Ineligible (200):
{
"phone_number": "+590690123456",
"portable": false,
"reason": "Recent port within 90 days",
"eligible_date": "2025-02-15"
}Error (400/401/429/500):
{
"error": "invalid_number",
"message": "The provided number format is invalid"
}Rate Limits: 100 requests per minute per API key.
Network Coverage and Infrastructure
Guadeloupe has modern telecommunications infrastructure with widespread 4G LTE coverage reaching approximately 95% of the population (ARCEP data, Q3 2024). 5G deployment is expanding in major cities. Fixed-line infrastructure in urban areas provides high-speed connectivity.
Coverage Details
| Area Type | 4G Coverage | 5G Coverage | Typical Speed |
|---|---|---|---|
| Pointe-à-Pitre (urban) | 99% | Available | 50–150 Mbps |
| Basse-Terre (urban) | 99% | Limited | 40–120 Mbps |
| Coastal towns | 95–98% | Planned | 30–100 Mbps |
| Rural areas | 80–90% | Not available | 10–50 Mbps |
| Remote/mountainous | 60–75% | Not available | 5–30 Mbps |
Known Coverage Limitations:
- Mountainous interior regions (Basse-Terre National Park)
- Some offshore islands (Les Saintes, Marie-Galante – coverage varies by operator)
- Deep valleys and heavily forested areas
Network Monitoring
Integrate network status checks to enhance user experience:
async function getNetworkStatus(latitude, longitude) {
try {
const response = await fetch(`${API_ENDPOINT}/network/status`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ latitude, longitude })
});
if (!response.ok) {
// Fallback to default "unknown" status
return { status: 'unknown', coverage: null };
}
return await response.json();
} catch (error) {
console.warn('Network status check unavailable:', error);
return { status: 'unavailable', coverage: null };
}
}Implementation Note: Replace API_ENDPOINT and API_KEY with your provider's details. Orange and Digicel offer network status APIs for enterprise customers. Contact your carrier's business division for API access and documentation.
Database Schema for Phone Numbers
Design your database schema to efficiently store and manage Guadeloupe phone number data:
CREATE TABLE phone_numbers (
id SERIAL PRIMARY KEY,
number VARCHAR(20) NOT NULL UNIQUE CHECK (number ~ '^\+590(590|690|800|89\d)\d{6}$'), -- Enforced [E.164 format](https://www.sent.dm/resources/e164-phone-format) and validation
type VARCHAR(20) CHECK (type IN ('landline', 'mobile', 'toll_free', 'premium_rate')),
carrier_id INTEGER REFERENCES carriers(id),
ported BOOLEAN DEFAULT FALSE,
porting_date TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);This schema enforces E.164 format, categorizes number types, and tracks porting status.
Index Recommendations
-- Optimize lookups by number
CREATE INDEX idx_phone_number ON phone_numbers(number);
-- Optimize queries by carrier and type
CREATE INDEX idx_carrier_type ON phone_numbers(carrier_id, type);
-- Optimize porting history queries
CREATE INDEX idx_porting_date ON phone_numbers(porting_date) WHERE ported = TRUE;
-- Optimize time-based queries
CREATE INDEX idx_created_at ON phone_numbers(created_at);Data Privacy and Compliance
As a French territory, Guadeloupe falls under GDPR. Follow these requirements:
Data Collection:
- Obtain explicit consent before storing phone numbers
- Document the legal basis for processing (consent, contract, legitimate interest)
- Provide clear privacy notices
Data Retention:
- Define retention periods based on business needs (typically 2–5 years for inactive accounts)
- Implement automatic deletion after retention period
- Respond to deletion requests within 30 days
Security Measures:
- Encrypt phone numbers at rest and in transit
- Implement access controls and audit logs
- Regular security assessments
User Rights:
- Provide data access (export functionality)
- Enable data portability
- Honor deletion requests ("right to be forgotten")
-- Add retention tracking
ALTER TABLE phone_numbers ADD COLUMN retention_until TIMESTAMP;
ALTER TABLE phone_numbers ADD COLUMN consent_date TIMESTAMP;
ALTER TABLE phone_numbers ADD COLUMN legal_basis VARCHAR(50);NoSQL Alternative (MongoDB)
const phoneNumberSchema = new Schema({
number: {
type: String,
required: true,
unique: true,
match: /^\+590(590|690|800|89\d)\d{6}$/
},
type: {
type: String,
enum: ['landline', 'mobile', 'toll_free', 'premium_rate'],
required: true
},
carrier: { type: Schema.Types.ObjectId, ref: 'Carrier' },
ported: { type: Boolean, default: false },
portingDate: Date,
retentionUntil: Date,
consentDate: Date,
legalBasis: String,
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now }
});
// Indexes
phoneNumberSchema.index({ number: 1 });
phoneNumberSchema.index({ carrier: 1, type: 1 });
phoneNumberSchema.index({ portingDate: 1 }, { sparse: true });Testing and Quality Assurance
Test thoroughly to ensure reliability. Implement unit tests for number formatting, validation, and API integrations. Cover the entire lifecycle from input to storage and retrieval.
// Example using Jest
const { validateGuadeloupeNumber } = require('./phone-utils');
describe('Guadeloupe Phone Number Validation', () => {
it('should validate a correctly formatted mobile number', () => {
expect(validateGuadeloupeNumber('+590690123456')).toBe(true);
});
it('should reject an invalid number format', () => {
expect(validateGuadeloupeNumber('59069012345')).toBe(false);
});
});This example demonstrates basic validation. Expand your test suite to cover edge cases:
describe('Edge Cases', () => {
const testCases = [
{ input: '+590 690 12 34 56', expected: true, desc: 'with spaces' },
{ input: '+590-690-12-34-56', expected: true, desc: 'with dashes' },
{ input: '+590(690)123456', expected: true, desc: 'with parentheses' },
{ input: '0690123456', expected: false, desc: 'missing country code' },
{ input: '+590690123', expected: false, desc: 'too short' },
{ input: '+59069012345678', expected: false, desc: 'too long' },
{ input: '+590990123456', expected: false, desc: 'invalid prefix' },
{ input: '+590 800 00 00 00', expected: true, desc: 'toll-free' },
{ input: '+590 891 23 45 67', expected: true, desc: 'premium rate' }
];
testCases.forEach(({ input, expected, desc }) => {
it(`should ${expected ? 'accept' : 'reject'} number ${desc}`, () => {
expect(validateGuadeloupeNumber(input)).toBe(expected);
});
});
});Integration Tests
describe('Phone Number Lifecycle', () => {
it('should handle complete CRUD operations', async () => {
const testNumber = '+590690123456';
// Create
const created = await createPhoneNumber(testNumber, 'mobile');
expect(created.number).toBe(testNumber);
// Read
const fetched = await getPhoneNumber(testNumber);
expect(fetched.number).toBe(testNumber);
// Update (port to new carrier)
const updated = await portNumber(testNumber, newCarrierId);
expect(updated.ported).toBe(true);
expect(updated.carrier_id).toBe(newCarrierId);
// Delete
await deletePhoneNumber(testNumber);
const deleted = await getPhoneNumber(testNumber);
expect(deleted).toBeNull();
});
});Performance Testing
Test validation performance with large datasets:
const { performance } = require('perf_hooks');
function benchmarkValidation(iterations = 100000) {
const testNumbers = [
'+590690123456',
'+590590271234',
'+590800123456',
'invalid'
];
const start = performance.now();
for (let i = 0; i < iterations; i++) {
testNumbers.forEach(num => validateGuadeloupeNumber(num));
}
const end = performance.now();
const timePerValidation = (end - start) / (iterations * testNumbers.length);
console.log(`Average validation time: ${timePerValidation.toFixed(4)}ms`);
console.log(`Validations per second: ${(1000 / timePerValidation).toFixed(0)}`);
}Frequently Asked Questions About Guadeloupe Phone Numbers
Q: Can I use a Guadeloupe number for SMS verification? Yes. All mobile numbers (690 prefix) support SMS. Ensure your SMS provider supports French Caribbean destinations. For more details on SMS implementation, see our SMS API integration guide.
Q: Do Guadeloupe numbers work with WhatsApp and Signal? Yes. Use the full international format (+590 690…) when registering.
Q: What happens to my number if I move from Guadeloupe? You can keep your number if you maintain an active account. Some carriers offer international roaming or virtual presence options.
Q: Are there number reservation services? Yes. Contact carriers directly for vanity numbers or specific number patterns. Fees vary by carrier and number desirability.
Q: How do I handle numbers from Saint Barthélemy and Saint Martin? Both territories use different country codes: +590 for Saint Martin (shared with Guadeloupe) and +590 for Saint Barthélemy. The numbering system is shared with Guadeloupe.
Troubleshooting
Issue: Number validation fails in production but works locally
Cause: Different regex engines or character encoding issues Solution: Use a consistent validation library across environments and normalize input to remove hidden characters
Issue: API calls return 401 Unauthorized
Cause: Expired or invalid API token Solution: Implement token refresh logic and verify token permissions
Issue: Database queries are slow
Cause: Missing indexes on frequently queried columns
Solution: Add indexes on number, carrier_id, and created_at columns
Issue: Users report they can't port their number
Cause: Outstanding balance, recent port, or incorrect RIO code Solution: Verify account status with current carrier and obtain valid RIO code