Accepted answer and derivatives didn't work for me. Results were very inaccurate.

Correct implementation in javascript:

    function pointAtDistance(inputCoords, distance) {
    	const result = {}
    	const coords = toRadians(inputCoords)
    	const sinLat = 	Math.sin(coords.latitude)
    	const cosLat = 	Math.cos(coords.latitude)
    
    	/* go a fixed distance in a random direction*/
    	const bearing = Math.random() * TWO_PI
    	const theta = distance/EARTH_RADIUS
        const sinBearing = Math.sin(bearing)
    	const cosBearing = 	Math.cos(bearing)
        const sinTheta = Math.sin(theta)
    	const cosTheta = 	Math.cos(theta)
     	
    	result.latitude = Math.asin(sinLat*cosTheta+cosLat*sinTheta*cosBearing);
    	result.longitude = coords.longitude + 
    		Math.atan2( sinBearing*sinTheta*cosLat, cosTheta-sinLat*Math.sin(result.latitude )
    	);
    	/* normalize -PI -> +PI radians (-180 - 180 deg)*/
     	result.longitude = ((result.longitude+THREE_PI)%TWO_PI)-Math.PI
    
    	return toDegrees(result)
    }
    
    function pointInCircle(coord, distance) {
    	const rnd =  Math.random()
    	/*use square root of random number to avoid high density at the center*/
     	const randomDist = Math.sqrt(rnd) * distance
    	return pointAtDistance(coord, randomDist)
    }

[Full gist here][1]

In the accepted answer - I found that points are distributed in an ellipse with its width 1.5 times its height (in Panama) and 8 times its height (in the north of Sweden). If I removed the x coord adjustment from @whuber's answer the ellipse is distorted the other way, 8 times higher than its width.

The code in my answer was based on algorithms from [here][2]

Below you can see two jsfiddles that show the problem with the stretching ellipse

[Correct algorithm][3]

[Distorted algorithm][4]


  [1]: https://gitlab.com/snippets/28591
  [2]: http://www.movable-type.co.uk/scripts/latlong.html
  [3]: http://jsfiddle.net/hoolymama/56wzdtax/
  [4]: http://jsfiddle.net/hoolymama/h9e9goox/1/