/** * Return a phone number * * @param null $state_code * @param null $zip * @param bool $include_toll_free * @return string */ public function getPhone($state_code = null, $zip = null, $include_toll_free = false) { if (!empty($zip)) { $areacodes = Zipcode::where('zip', $zip)->orderByRaw(Database::random())->first()->area_codes; } else { // Get a random state if state not provided $state_code = !empty($state_code) ? $state_code : $this->getState()->code; // Get area codes appropriate for this state $areacodes = Zipcode::where('state_code', $state_code)->orderByRaw(Database::random())->first()->area_codes; } // Get list of valid area codes for the state/zip code $code_list = explode(',', $areacodes); // @codeCoverageIgnoreStart // Add some toll free numbers into the mix. if ($include_toll_free === true) { $code_list[] = 800; $code_list[] = 888; $code_list[] = 877; $code_list[] = 866; $code_list[] = 855; } // @codeCoverageIgnoreEnd // Get a random area code from valid area codes $areacode = $this->fromArray($code_list); $prefix = rand(100, 999); $number = rand(1, 9999); return $areacode . '-' . $prefix . '-' . str_pad($number, 4, '0', STR_PAD_LEFT); }