Philippine Numbering/Dialing Plan

After messing about at length trying to find an authoritive source for this information and finding that nothing seemed to exist... Here's what information I have... let me know if you are aware of any issues.

Update (August 2022): Metro Manila numbers had a digit inserted at the start of the subscriber number in 2019 and Dito launched as a mobile telco.

Overview

Numbers should be written in one of the following formats

For landline access within a single area code only:
<subscriber number> e.g. 1234567 or 123 4567
For access from any phone in the country:
<national/long distance trunk access code><areacode> <subscriber number> e.g. 02 1234567 or 02 123 3456
For access from anywhere in the world:
+<country code> <area code> <subscriber number> e.g. +63 2 1234567 or +63 2 123 4567
A less correct form of the above that could be used to make it easier for people to see where the national/long distance trunk access code should be placed:
+<country code> (<national/long distance trunk access code>)<area code> <subscriber number> e.g. +63 (0)2 1234567 or +63 (0)2 123 4567

Numbers SHOULD NOT be written in the following screwed up format which only seems to exist to make Metro Manila numbers look like US numbers...

(<country code><area code>) <subscriber number> e.g. (632) 123 4567 - that's just wrong...

Area Codes

Summary

Details

Area codeNumberArea or operator
2XXXX XXXXMetro Manila / NCR, Rizal & Obando (Bulacan)
32XXX XXXXCebu
33XXX XXXXGuimaras & Iloilo
34XXX XXXXNegros Occidental
35XXX XXXXNegros Oriental & Siquijor
36XXX XXXXAklan, Antique & Capiz
38XXX XXXXBohol
42XXX XXXXAurora, Marinduque, Quezon & Romblon
43XXX XXXXBatangas, Occidental Mindoro, Oriental Mindoro
44XXX XXXXBulacan (except Obando) & Neuva Ecija
45XXX XXXXPampanga & Tarlac
46XXX XXXXCavite
47XXX XXXXBataan & Zambales
48XXX XXXXPalawan
49XXX XXXXLaguna
52XXX XXXXAlbay & Catanduanes
53XXX XXXXBiliran, Leyte & Southern Leyte
54XXX XXXXCamarines Norte & Camarines Sur
55XXX XXXXEastern Samar, Northern Samar, Western Samar
56XXX XXXXMasbate & Sorsogon
62XXX XXXXBasilan, Zamboanga del Sur & Zamboanga Sibugay
63XXX XXXXLanao del Norte, Lanao del Sur
64XXX XXXXCotabato, Maguindanao & Sultan Kudarat
65XXX XXXXZamboanga del Norte
68XXX XXXXSulu & Tawi-Tawi
72XXX XXXXLa Union
74XXX XXXXCordillera Administrative Region (Abra, Apayao, Benguet, Ifugao, Kalinga, Mountain Province)
75XXX XXXXPangasinan
77XXX XXXXIlocos Norte & Ilocos Sud
78XXX XXXXCagayan Valley
817XXX XXXXGlobe Telecom (International Virtual Numbers - DUO PLUS) - To confirm length
82XXX XXXXDavao del Sur
83XXX XXXXSarangani & South Cotabato
84XXX XXXXDavao del Norte
85XXX XXXXAgusan del Norte & Agusan del Sur
86XXX XXXXSurigao del Norte & Surigao del Sur
87XXX XXXXCompostela Valley & Davao Central
88XXX XXXXBukidnon, Camiguin, Misamis Occidental & Misamis Oriental
895XXX XXXXDito Telecommunity (Mobile)
896XXX XXXXDito Telecommunity (Mobile)
897XXX XXXXDito Telecommunity (Mobile)
898XXX XXXXDito Telecommunity (Mobile)
905XXX XXXXGlobe Telecom (Mobile)
906XXX XXXXGlobe Telecom (Mobile)
907XXX XXXXSmart Communications (Mobile)
908XXX XXXXSmart Communications (Mobile)
909XXX XXXXSmart Communications (Mobile)
910XXX XXXXSmart Communications (Mobile)
912XXX XXXXSmart Communications (Mobile)
915XXX XXXXGlobe Telecom (Mobile)
916XXX XXXXGlobe Telecom (Mobile)
917XXX XXXXGlobe Telecom (Mobile)
918XXX XXXXSmart Communications (Mobile)
919XXX XXXXSmart Communications (Mobile)
920XXX XXXXSmart Communications (Mobile)
921XXX XXXXSmart Communications (Mobile)
922XXX XXXXSun Cellular (Mobile)
923XXX XXXXSun Cellular (Mobile)
925XXX XXXXSun Cellular (Mobile)
926XXX XXXXGlobe Telecom (Mobile)
927XXX XXXXGlobe Telecom (Mobile)
928XXX XXXXSmart Communications (Mobile)
929XXX XXXXSmart Communications (Mobile)
930XXX XXXXSmart Communications (Mobile)
932XXX XXXXSun Cellular (Mobile)
933XXX XXXXSun Cellular (Mobile)
934XXX XXXXSun Cellular (Mobile)
935XXX XXXXGlobe Telecom (Mobile)
936XXX XXXXGlobe Telecom (Mobile)
937XXX XXXXGlobe Telecom/ABS-CBN (Mobile)
938XXX XXXXSmart Communications (Mobile)
939XXX XXXXSmart Communications (Mobile)
942XXX XXXXSun Cellular (Mobile)
943XXX XXXXSun Cellular (Mobile)
946XXX XXXXSmart Communications (Mobile)
947XXX XXXXSmart Communications (Mobile)
948XXX XXXXSmart Communications (Mobile)
949XXX XXXXSmart Communications (Mobile)
950XXX XXXXSmart Communications (Mobile)
975XXX XXXXGlobe Telecom (Mobile)
977XXX XXXXGlobe Telecom (Mobile)
989XXX XXXXSmart Communications (Mobile)
991XXX XXXXDito Telecommunity (Mobile)
992XXX XXXXDito Telecommunity (Mobile)
993XXX XXXXDito Telecommunity (Mobile)
994XXX XXXXDito Telecommunity (Mobile)
995XXX XXXXGlobe Telecom (Mobile)
996XXX XXXXGlobe Telecom (Mobile)
997XXX XXXXGlobe Telecom (Mobile)
998XXX XXXXSmart Communications (Mobile)
999XXX XXXXSmart Communications (Mobile)

Special Numbers

Emergency numbers

The national standard emergency number is 117. This can also be texted from mobile phones.

From mobile phones at least 112 and 911 can also used.

In addition there are a large number of individual hotline numbers used for various emergency services, 3 and 5 digit numbers exist. e.g.

Freephone/Tollfree numbers

Free to call/Toll free numbers are few and far between in the Philippines... a major reason would likely be that calls are typically free within an area code, so if you are in Metro Manila you can call everyone else in Metro Manila with a landline for free... Another reason has to be the obviously screwed up ways they've been implemented...

Format a)
1800 <8 digit number> e.g. 1800 1234 5678
Format b)
1027 1800 <7 digit number> e.g. 1027 1800 123 4567

Both formats make very little sense...

Hotlines

There are a number of additional hotlines in addition to the emergency numbers above, some are free, others aren't... Some of those are...

PLDT #MyNumber

PLDT in early 2016 introduced a strange new national hotline service called #MyNumber. It's strange due to the fact that numbers start with '#' followed by 4-8 digits.

e.g.

Asterisk style dialplan

;
; Sample dialplan below based on dialing 9 for an outside line intending to catch most options for calls in the Philippines
; You'd need to include these in whatever contexts you inject calls from phones/users/lines into
;

;
; Emergency hotline numbers that you probably want to be callable from all devices
;
[trunkemergency]
exten => 9112,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9116,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9117,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9166,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9177,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9757,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9911,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _916XXX,1,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

;
; To external international numbers prefixed by 9 and 00 international access code, 9 and + or just +
;
[trunkint]
exten => _900.,1,Verbose(2, International call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _900.,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9+.,1,Verbose(2, International call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9+.,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _+.,1,Verbose(2, International call to ${EXTEN})
exten => _+.,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN}))

;
; To external national numbers
;
[trunknational]
exten => _90063[1345678].,1,Goto(90${EXTEN:5},1)
exten => _9+63[1345678].,1,Goto(90${EXTEN:4},1)
exten => _+63[1345678].,1,Goto(90${EXTEN:3},1)
exten => _90[1345678].,1,Verbose(2, National call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _90[1345678].,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

;
; To mobile phones
;
[trunkmobile]
exten => _900639XXXXXXXXX,1,Goto(90${EXTEN:5},1)
exten => _9+639XXXXXXXXX,1,Goto(90${EXTEN:4},1)
exten => _+639XXXXXXXXX,1,Goto(90${EXTEN:3},1)

; Globe
exten => _9090[56]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9090[56]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9091[567]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9091[567]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9092[67]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9092[67]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9093[567]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9093[567]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9097[57]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9097[57]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9099[467]XXXXXXX,1,Verbose(2, Mobile call to Globe phone ${EXTEN:1})
exten => _9099[467]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

; Smart/PLDT
exten => _9090[789]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9090[789]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9091[0289]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9091[0289]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9092[0189]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9092[0189]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9093[089]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9093[089]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9094[6789]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9094[6789]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _90950XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _90950XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _90989XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _90989XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9099[89]XXXXXXX,1,Verbose(2, Mobile call to Smart phone ${EXTEN:1})
exten => _9099[89]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

exten => _90999XXXXXXX,1,Verbose(2, Mobile call to Smart (U Phone) phone ${EXTEN:1})
exten => _90999XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

; Sun/PLDT
exten => _9092[235]XXXXXXX,1,Verbose(2, Mobile call to Sun phone ${EXTEN:1})
exten => _9092[235]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9093[234]XXXXXXX,1,Verbose(2, Mobile call to Sun phone ${EXTEN:1})
exten => _9093[234]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9094[23]XXXXXXX,1,Verbose(2, Mobile call to Sun phone ${EXTEN:1})
exten => _9094[23]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))


; Dito
exten => _9089[5678]XXXXXXX,1,Verbose(2, Mobile call to Dito phone ${EXTEN:1})
exten => _9089[5678]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9099[1234]XXXXXXX,1,Verbose(2, Mobile call to Dito phone ${EXTEN:1})
exten => _9099[1234]XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

; Unknown
exten => _909XXXXXXXXX,1,Verbose(2, Mobile call to unknown operator phone ${EXTEN:1})
exten => _909XXXXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

;
; To local numbers
;
[trunklocal]
exten => _900632XXXXXXXX,1,Goto(90${EXTEN:5},1)
exten => _9+632XXXXXXXX,1,Goto(90${EXTEN:4},1)
exten => _+632XXXXXXXX,1,Goto(90${EXTEN:3},1)

exten => _902XXXXXXXX,1,Verbose(2, Local call to ${EXTEN})
exten => _902XXXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

exten => _9ZXXXXXXX,1,Verbose(2, Local call to ${EXTEN})
exten => _9ZXXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

exten => _9ZXXXX,1,Verbose(2, Local call to ${EXTEN})
exten => _9ZXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

;
; Short code hotlines
;
[trunkhotlines]
exten => 9136,1,Verbose(2, Hotline call to MMDA hotline ${EXTEN})
exten => 9136,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9143,1,Verbose(2, Hotline call to Red Cross hotline ${EXTEN})
exten => 9143,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 9161,1,Verbose(2, Hotline call to Marikina STOC hotline ${EXTEN})
exten => 9161,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 91627,1,Verbose(2, Hotline call to Manila Water hotline ${EXTEN})
exten => 91627,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 916502,1,Verbose(2, Hotline call to DPWH hotline ${EXTEN})
exten => 916502,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _917[1-3],1,Verbose(2, Hotline call to PLDT hotline ${EXTEN})
exten => _917[1-3],n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 91342,1,Verbose(2, Hotline call to LTFRB hotline ${EXTEN})
exten => 91342,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => 97890,1,Verbose(2, Hotline call to DOTC hotline ${EXTEN})
exten => 97890,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

; PLDT #MyNumber national hotlines, 4-8 digits after #
exten => _9#XXXX,1,Verbose(2, National #MyNumber call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9#XXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9#XXXXX,1,Verbose(2, National #MyNumber call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9#XXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9#XXXXXX,1,Verbose(2, National #MyNumber call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9#XXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9#XXXXXXX,1,Verbose(2, National #MyNumber call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9#XXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))
exten => _9#XXXXXXXX,1,Verbose(2, National #MyNumber call to ${EXTEN:${GLOBAL(TRUNKMSD)}})
exten => _9#XXXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))

;
; Long distance context accessed through trunk interface
;
[trunktollfree]
exten => _91800XXXXXXXX,1,Verbose(2, Toll Free call to ${EXTEN})
exten => _91800XXXXXXXX,n,Gosub(trunkdial,s,1(${GLOBAL(TRUNK)},${EXTEN:${GLOBAL(TRUNKMSD)}}))