<?php /** * validate_domain * * validate domain * * @version 0.5 * @author Contributors at eXorithm * @link /algorithm/view/validate_domain Listing at eXorithm * @link /algorithm/history/validate_domain History at eXorithm * @license /home/show/license * * @param mixed $domain * @return bool */ function validate_domain($domain='www.google.com') { return preg_match ("/^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu)$/i", $domain); } ?>
Category: Source
Draw Triangle
<?php /** * draw_triangle * * Draw a filled triangle. * * @version 0.4 * @author Contributors at eXorithm * @link /algorithm/view/draw_triangle Listing at eXorithm * @link /algorithm/history/draw_triangle History at eXorithm * @license /home/show/license * * @param array $points This should be a list of six numbers that define the points of the triange (x1, y1, x2, y2, x3, y3) * @param string $color (hex color code) The color of the triangle * @return resource GD image */ function draw_triangle($points=array(0=>'0',1=>'0',2=>'0',3=>'8',4=>'8',5=>'4'),$color='000000') { if (count($points)!=6) { throw new Exception('The points must be an array of 6 integers.'); } $image = image_create_alpha(max($points[0], $points[2], $points[4])+1, max($points[1], $points[3], $points[5])+1); $red = hexdec(substr($color, 0, 2)); $green = hexdec(substr($color, 2, 2)); $blue = hexdec(substr($color, 4, 2)); $color = imagecolorallocatealpha($image, $red, $green, $blue, 0); imagefilledpolygon($image, $points, 3, $color); return $image; } /** * image_create_alpha * * Helper function to create a new blank image with transparency. * * @version 0.1 * @author Contributors at eXorithm * @link /algorithm/view/image_create_alpha Listing at eXorithm * @link /algorithm/history/image_create_alpha History at eXorithm * @license /home/show/license * * @param mixed $width * @param mixed $height * @return resource GD image */ function image_create_alpha($width='',$height='') { // Create a normal image and apply required settings $img = imagecreatetruecolor($width, $height); imagealphablending($img, false); imagesavealpha($img, true); // Apply the transparent background $trans = imagecolorallocatealpha($img, 0, 0, 0, 127); for ($x = 0; $x < $width; $x++) { for ($y = 0; $y < $height; $y++) { imagesetpixel($img, $x, $y, $trans); } } return $img; } ?>
Weather Forecast
<?php /** * weather_forecast * * Display the weather for a location. Look up using the Google weather API. * * @version 1.4 * @author Contributors at eXorithm * @link /algorithm/view/weather_forecast Listing at eXorithm * @link /algorithm/history/weather_forecast History at eXorithm * @license /home/show/license * * @param mixed $location The location to get the weather for. Can be a city, zip code, or postal code. * @param mixed $units The units to get the temperature in. * @param string $header_color (hex color code) Color of the header * @param string $day_header_color (hex color code) Color of the header for each of the days * @param string $day_color (hex color code) Color of the cells containing the forecasts * @return string HTML */ function weather_forecast($location='Sydney, Australia',$units='c',$header_color='f0f0f0',$day_header_color='d0ffd0',$day_color='f0f0f0') { $weather = file_get_contents('http://www.google.com/ig/api?weather='.urlencode($location)); $xml = simplexml_load_string($weather); if (!isset($xml->weather->forecast_conditions)) { throw new Exception('Data could not be retreived for location '.$location); } $location = $xml->weather->forecast_information->city['data']; // four day outlook for ($i = 0; $i < 4; $i++){ if ($xml->weather->forecast_conditions->$i) { $forecast_day[] = $xml->weather->forecast_conditions->$i->day_of_week['data']; $forecast_condition[] = $xml->weather->forecast_conditions->$i->condition['data']; $low = $xml->weather->forecast_conditions->$i->low['data']; if ($units=='k') $low = round((($low - 32)*5/9) + 273, 1); else if ($units=='c') $low = round(($low - 32)*5/9, 1); $forecast_low[] = $low; $high = $xml->weather->forecast_conditions->$i->high['data']; if ($units=='k') $high = round((($high - 32)*5/9) + 273, 1); else if ($units=='c') $high = round(($high - 32)*5/9, 1); $forecast_high[] = $high; $forecast_icon[] = $xml->weather->forecast_conditions->$i->icon['data']; } } // current $condition = $xml->weather->current_conditions->condition['data']; $temp = $xml->weather->current_conditions->temp_f['data']; if ($units=='k') $temp = round((($temp - 32)*5/9) + 273, 1); else if ($units=='c') $temp = round(($temp - 32)*5/9, 1); $icon = $xml->weather->current_conditions->icon['data']; // build the HTML $header = "<tr><td colspan=\"".count($forecast_day)."\" bgcolor=\"#$header_color\">"; if ($icon!='') $header .= "<img align=\"left\" src=\"http://www.google.com$icon\">"; $header .= "<b>$location</b><br>Currently <i>$condition</i> <b>$temp$units</b>"; $header .= "</td></tr>\n<tr>"; $data = "<tr>\n"; for ($i = 0; $i < count($forecast_day); $i++){ $header .= "<td width=\"130\" bgcolor=\"#$day_header_color\"><b>$forecast_day[$i]</b></td>"; $data .= "<td bgcolor=\"#$day_color\">"; $data .= "<img src=\"http://www.google.com$forecast_icon[$i]\">"; $data .= "<br><i>$forecast_condition[$i]</i>"; $data .= "<br>high <b>$forecast_high[$i]$units</b>"; $data .= "<br>low <b>$forecast_low[$i]$units</b>"; $data .= "</td>\n"; } $header .= "</tr>"; $data .= "</tr>"; return "<table cellpadding=\"5\" cellspacing=\"3\">\n$header\n$data\n</table>"; } ?>
Draw UPC Barcode
<?php /** * draw_upc_barcode * * Draw a barcode for a UPC number. * * @version 0.3 * @author Contributors at eXorithm * @link /algorithm/view/draw_upc_barcode Listing at eXorithm * @link /algorithm/history/draw_upc_barcode History at eXorithm * @license /home/show/license * * @param mixed $number The 12-digit UPC number. * @param bool $show_numbers Whether to draw the numbers at the bottom of the barcode. * @return resource GD image */ function draw_upc_barcode($number='925853043217',$show_numbers=true) { $number = str_replace(array('-',' '), '', $number); if (strlen($number)!=12) throw new Exception("UPC number must have 12 digits"); for ($i=0;$i<12;$i++) { if (!is_numeric($number[$i])) throw new Exception("UPC number must contain only digits"); } $lcodes = array( '0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011', ); $rcodes = array( '1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100', ); $code = '101'; for ($i=0;$i<6;$i++) { $code .= $lcodes[$number[$i]]; } $code .= '01010'; for ($i=6;$i<12;$i++) { $code .= $rcodes[$number[$i]]; } $code .= '101'; // create image $width=190; $height=100; $image = image_create_alpha($width, $height); $white = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, $width, $height, $white); // draw lines $black = imagecolorallocate($image, 0, 0, 0); for ($i=0;$i<strlen($code);$i++) { if ($code[$i]=='1') { imageline($image, $i*2,0, $i*2, $height, $black); imageline($image, $i*2+1,0, $i*2+1, $height, $black); } } // draw numbers if ($show_numbers) { imagefilledrectangle($image, 6, $height-16, 90, $height, $white); imagefilledrectangle($image, 98, $height-16, 182, $height, $white); for ($i=0;$i<6;$i++) { imagestring($image, 2, 11+$i*14, $height-14, $number[$i], $black); } for ($i=6;$i<12;$i++) { imagestring($image, 2, 19+$i*14, $height-14, $number[$i], $black); } } return $image; } /** * image_create_alpha * * Helper function to create a new blank image with transparency. * * @version 0.1 * @author Contributors at eXorithm * @link /algorithm/view/image_create_alpha Listing at eXorithm * @link /algorithm/history/image_create_alpha History at eXorithm * @license /home/show/license * * @param mixed $width * @param mixed $height * @return resource GD image */ function image_create_alpha($width='',$height='') { // Create a normal image and apply required settings $img = imagecreatetruecolor($width, $height); imagealphablending($img, false); imagesavealpha($img, true); // Apply the transparent background $trans = imagecolorallocatealpha($img, 0, 0, 0, 127); for ($x = 0; $x < $width; $x++) { for ($y = 0; $y < $height; $y++) { imagesetpixel($img, $x, $y, $trans); } } return $img; } ?>
Address Elevation
<?php /** * address_elevation * * Returns the elevation (in meters) above sea level for an address. * * @version 0.2 * @author Contributors at eXorithm * @link /algorithm/view/address_elevation Listing at eXorithm * @link /algorithm/history/address_elevation History at eXorithm * @license /home/show/license * * @param mixed $address The address to get the elevation for. * @return mixed */ function address_elevation($address='Denver, Colorado') { // get the lat/long for this address $data = file_get_contents("http://maps.google.com/maps/geo?output=csv&q=".urlencode($address)); $arr = explode(",", $data); if (count($arr)>=4) { if ($arr[0]==200) { // get the elevation for this lat/long $data = file_get_contents("http://maps.googleapis.com/maps/api/elevation/xml?sensor=false&locations=".$arr[2].','.$arr[3]); $obj = simplexml_load_string($data); if ($obj instanceof SimpleXMLElement) { $obj = (array) $obj; $obj = $obj['result']; if ($obj instanceof SimpleXMLElement) { $obj = (array) $obj; return $obj['elevation']; } else { throw new Exception('Elevation lookup failed'); } } else { throw new Exception('Elevation lookup failed'); } } else { throw new Exception('Address lookup failed'); } } else { throw new Exception('Address lookup failed'); } } ?>
Create Gradient
<?php /** * create_gradient * * Create an image that is a color gradient. * * @version 0.1 * @author Contributors at eXorithm * @link /algorithm/view/create_gradient Listing at eXorithm * @link /algorithm/history/create_gradient History at eXorithm * @license /home/show/license * * @param string $start_color (hex color code) The start color of the gradient. * @param string $end_color (hex color code) The end color of the gradient. * @param number $size The length of the resulting image. * @param number $thickness The thickness of the resulting image. * @param mixed $orientation The orientation of the gradient. * @return resource GD image */ function create_gradient($start_color='ffffff',$end_color='000000',$size=100,$thickness=5,$orientation='') { if ($orientation=="vertical") { $img=imagecreatetruecolor($thickness,$size); } else { $img=imagecreatetruecolor($size,$thickness); } $start_r = hexdec(substr($start_color, 0, 2)); $start_g = hexdec(substr($start_color, 2, 2)); $start_b = hexdec(substr($start_color, 4, 2)); $end_r = hexdec(substr($end_color, 0, 2)); $end_g = hexdec(substr($end_color, 2, 2)); $end_b = hexdec(substr($end_color, 4, 2)); for ($i=0;$i<$size;$i++) { $red = round($start_r - ($start_r-$end_r) * ($i / ($size-1))); $green = round($start_g - ($start_g-$end_g) * ($i / ($size-1))); $blue = round($start_b - ($start_b-$end_b) * ($i / ($size-1))); $color = imagecolorallocate($img, $red, $green, $blue); if ($orientation=="vertical") { for ($k=0;$k<$thickness;$k++) imagesetpixel($img, $k, $i, $color); } else { for ($k=0;$k<$thickness;$k++) imagesetpixel($img, $i, $k, $color); } } return $img; } ?>
Unity
<?php /** * unity * * Returns digit summation of any numerical value given for passkey (up to 14 digits in length) * * @version 1.2 * @author Contributors at eXorithm * @link /algorithm/view/unity Listing at eXorithm * @link /algorithm/history/unity History at eXorithm * @license /home/show/license * * @param number $passkey enter any numerical "whole" digits (non-negative) * @return mixed */ function unity($passkey=75025) { $ubn = array(); while ($passkey > 9) { if (strlen($passkey) > 1) $passkey = array_sum(str_split($passkey)); else $passkey = $passkey; } $ubn[] = $passkey; return end($ubn); } ?>
Duotone Image
<?php /** * duotone_image * * Change an image into a tinted grayscale. * * @version 0.5 * @author Contributors at eXorithm * @link /algorithm/view/duotone_image Listing at eXorithm * @link /algorithm/history/duotone_image History at eXorithm * @license /home/show/license * * @param resource $image (GD image) The image to duotone. * @param number $rplus Red value to increase or decrease. * @param number $gplus Green value to increase or decrease. * @param number $bplus Blue value to increase or decrease. * @param bool $pcnt If checked, the values for rplus, gplus and bplus will be treated as percentages. * @return resource GD image */ function duotone_image($image=null,$rplus=0,$gplus=0,$bplus=60,$pcnt=false) { // Adapted from http://www.tuxradar.com/practicalphp/11/2/21 $imagex = imagesx($image); $imagey = imagesy($image); $image2 = imagecreatetruecolor($imagex, $imagey); imagesavealpha($image2, true); imagealphablending($image2, false); for ($x = 0; $x <$imagex; ++$x) { for ($y = 0; $y <$imagey; ++$y) { $rgb = imagecolorat($image, $x, $y); $color = imagecolorsforindex($image, $rgb); $grey = floor(($color['red']+$color['green']+$color['blue'])/3); if ($pcnt) { $red = $grey + $grey*($rplus/150); $green = $grey + $grey*($gplus/150); $blue = $grey + $grey*($bplus/150); } else { $red = $grey + $rplus; $green = $grey + $gplus; $blue = $grey + $bplus; } if ($red > 255) $red = 255; if ($green > 255) $green = 255; if ($blue > 255) $blue = 255; if ($red < 0) $red = 0; if ($green < 0) $green = 0; if ($blue < 0) $blue = 0; $newcol = imagecolorallocatealpha($image2, $red,$green,$blue,$color['alpha']); imagesetpixel ($image2, $x, $y, $newcol); } } return $image2; } ?>
Make Change
<?php /** * make_change * * Calculate the number of different ways there are to make change for a given amount. * * @version 0.1 * @author Contributors at eXorithm * @link /algorithm/view/make_change Listing at eXorithm * @link /algorithm/history/make_change History at eXorithm * @license /home/show/license * * @param number $amount How many cents you want to make change for. * @param array $coins The coin denominations you have. * @return mixed */ function make_change($amount=100,$coins=array(0=>'1',1=>'5',2=>'10',3=>'25')) { $coin_count = count($coins); $table = array(); for ($i = -1; $i <= $amount; $i++) { for($j = -1; $j <= $coin_count; $j++) { // Rules // 1: table[0,0] or table[0,x] = 1 // 2: talbe[i <= -1, x] = 0 // 3: table[x, j <= -1] = 0 $total = 0; // first sub-problem // count(n, m-1) $n = $i; $m = $j-1; if ($n == 0) // rule 1 $total += 1; else if ($n <= -1) // rule 2 $total += 0; else if (($m <= 0) && ($n >= 1)) $total += 0; else $total += $table[$n][$m]; // second sub-problem // count(n-S[m], m) if (($j-1) <= -1) $total += 0; else { $n = $i - $coins[$j - 1]; $m = $j; if ($n == 0) // rule 1 $total += 1; else if ($n <= -1) // rule 2 $total += 0; else if (($m <= 0) && ($n >= 1)) // rule 3 $total += 0; else $total += $table[$n][$m]; } $table[$i][$j] = $total; } } return $table[$i-1][$j-1]; } ?>
Show Address
<?php /** * show_address * * Given an address, show the location on a map. * * @version 0.6 * @author Contributors at eXorithm * @link /algorithm/view/show_address Listing at eXorithm * @link /algorithm/history/show_address History at eXorithm * @license /home/show/license * * @param mixed $address The address to find. * @return array latitude/longitude */ function show_address($address='The White House 1600 Pennsylvania Ave NW Washington, DC 20500') { $data = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($address)."&sensor=false"); $obj = json_decode($data); if ($obj) { if (isset($obj->results[0]->geometry->location)) { $loc = $obj->results[0]->geometry->location; return array('latitude'=>$loc->lat, 'longitude'=>$loc->lng); } else { throw new Exception('Lookup failed and/or address does not exist!'); } } else { throw new Exception('Lookup failed and/or address does not exist!'); } } ?>