I needed a whole bunch of sample last names for some bogus data for an app I'm working on. Thankfully, we have Google, and of course, this information is just a query away.
I quickly found the Top 1000 most common surnames in the US (as of the 1990 census).
This should be exactly what I need.
Little known fact - Simon is a more common last name than Frank and Clayton. Not to mention Lloyd and Boone. Heck, we just barely beat out Waters.
As a bonus, here's a little PLT-Scheme app I wrote up to grab and fix the case on the names. No claim that it's especially efficient or compact, it just is.
(module name-grabber mzscheme (require (lib "url.ss" "net") (prefix l: (lib "1.ss" "srfi")) (prefix s: (lib "13.ss" "srfi")) (planet "sxml.ss" ("lizorkin" "sxml.plt" 1 4)) (planet "htmlprag.ss" ("neil" "htmlprag.plt" 1 3)) (lib "26.ss" "srfi")) (provide get-names) (define (fix-case word) (string-append (string-upcase (substring word 0 1)) (string-downcase (substring word 1)))) (define (get-names) (let* ((url (string->url "http://names.mongabay.com/most_common_surnames.htm")) (in-port (get-pure-port url)) (doc (html->sxml in-port))) (close-input-port in-port) (let ((name-rows ((sxpath '("//table[@style = 'boldtable']/tr")) doc))) (l:drop (map (lambda (row) (let ((cols ((sxpath '(// td *text*)) row))) (if (not (null? cols)) (fix-case (l:first cols)) (void)))) name-rows) 1)))) )