Since 2009, the 0870 numbers are "inclusive", not free. If you have free minutes to 01 and 02 from a landline, then 0870 are included too - otherwise you still pay for the call. 0870 used to be "revenue share" with the call price capped at the equivalent of a national call. Ofcom removed revenue share in 2009 and added the "inclusive" requirement. Mobile operators still charge for these calls.
0845 are also revenue share. They used to be capped at the price of a local call. Since 2004, no provider offers a cheaper rate for local calls, there's just one national or "geographic" rate. "Local rate" no longer exists. Further, most landline providers allow all 01 and 02 calls free within inclusive minutes.
BT thought that Ofcom were about to remove revenue share from 0845 so also made those calls inclusive in 2009. 0845 is still revenue share so BT has to subsidise those calls. Their mistake!
0844 has always been revenue share. These are NEVER usable within inclusive minutes. This is also true for 0871, 0843, and 0872. From a landline, the price varies according to the number called. A little known fact is that when you pay BT for a call to one of these numbers they pass all of the money on. The call price is the same as the revenue share. BT are not allowed to make a profit on these calls. Other providers are allowed to make a profit and do charge more for them.
Mobile operators charge 30 to 45p per min to call 084 and 087 numbers. They make a large profit on these calls.
Rules are changing in the next few months. 0870 will return to revenue share. 0845 and 0870 will no longer be inclusive from BT landlines.
Businesses using 084 and 087 numbers for customer service and other similar functions will have to move to the equivalent 034 and 037 numbers. 03 numbers cost the same as 01 and 02 numbers and are usuable in inclusive minutes from landlines and mobiles alike.
Businesses that continue to use 084 and 087 numbers will have to declare the revenue share amount that is included in the price of calls to their number.