Not free for meaningful numbers of requests, but I've used APIs like numverify[1] to do this before. There are probably per-carrier APIs you can request access to.
Not the most scientific approach, but you could send a message to every provider using the same number. If you get a "message not received" bounce back, then that's a good indication of which carriers are not the correct carrier.