Introduction
I am a mobile customer of M1 Limited. I am paying subscription charges of SGD43.64 which includes $5 SGD towards IDD 021 saver. M1 claims that its IDD 021 gives you savings of up to 77% on international call rates (compared with SingTel 013).
M1 gives you an IDD saver on IDD 021. If you opt for this saver all the IDD calls made with prefix 021 will be charged under local outgoing voice calls. To dial an international number you have to dial 021 - <ISD> - <Area> - <Phone> e.g. if I have to call a number 987654321 in India I will have to dial 021-91-987654321. So in the contacts of my hand phone I had stored the numbers of my friends and relatives in India as 021-91-phone_number.
M1 also has one more IDD plan called IDD 002. IDD 002 is premier IDD service from M1.
The Trap
When you receive IDD calls the phone displays you the correct name of the caller. M1 claims that such IDD incoming calls has no prefix like 021 / 002 in the caller id, the caller id received by the phone is <ISD> - <Area> - <Phone>. If what M1 claims are genuine; how that is my phone picks up the correct name which I have stored with prefix 021?
If you call a number from the phone history and it happens to be a received IDD call to my surprise even when you have not dialed 002 as prefix, the IDD call will by default get routed through IDD 002. In other words M1 will apply the charges of IDD 002 to IDD calls without a prefix. This is how you end up paying heavy phone bills. M1 aspects you to go to your contacts and search the person each time you want to make a call.
Some technical findings
After some Googling on the Internet I have learned a little on the logic used by the phones to match names in the contacts database.
The issue stems with the differences in which the same number can be stored, and given. For example in the US, they often have 7 digits dialing in some areas, but 10 digits are standard. Further confusing is that a valid number can contain the country code, giving an 11 – 13 digit number!
When do lookups this is difficult because if a user stores a 7 digit number, but the incoming call registers that person with a 10 digit number, they won't match in the naive matching approach. Of course this keeps getting more complicated as when a number received as a 13 digit vs. 10 digit seems to vary.
It’s not entirely well documented in the API, but you can tell that most phones stores all Phone numbers in the database with a key entry - reverse order digits only (i.e. 555-373-3034 becomes 4303373555). There is an API function call to reverse digits, and return the first few digits in reverse order, and is not surprisingly called "toCallerIdMinMatch". So using simple wildcard in the database lookup will yield any contact that has the same last digits.
Summary
I am sure the mobile companies know about this and if they want to work towards the benefit of the customer they can do so. However they are using this for generating bad profits.
I have decided now I will use phone cards only for IDD calls.