Become a member!

Delphi Fake Data Utils - Realistic Test Data Generator (Faker for Delphi)

Quick Answer: Delphi Fake Data Utils is Faker for Delphi. Use GetRndFullName(lcUS) for names, GetRndEMailAddress(lcUS) for emails, GetRndPhoneNumber(lcIT) for phones. Supports 5 locales and includes validators like IsValidFakeEmail().

What is Delphi Fake Data Utils?

Delphi Fake Data Utils is a free, open-source library for generating realistic fake data in Delphi applications. It’s the Delphi equivalent of Faker libraries found in other languages. Use it for unit testing, database seeding, API mocking, demos, and any scenario requiring realistic sample data without exposing sensitive information.

Key Features

  • Multi-Locale Support - Italian, US English, UK English, German, French
  • High Performance - 10,000 names generated in ~0.05 seconds
  • Comprehensive - Personal, business, product, technical, and financial data
  • Validation Functions - Verify generated data format
  • No Dependencies - Pure Delphi, works immediately

Quick Start

uses RandomUtilsU;

var
  Name: string;
  Email: string;
  Phone: string;
begin
  Name := GetRndFullName(lcIT);        // "Marco Rossi"
  Email := GetRndEMailAddress(lcUS);   // "john.smith@gmail.com"
  Phone := GetRndPhoneNumber(lcIT);    // "+39 345 678 9012"
end;

Supported Locales

Locale Code Example Name Example Phone
Italian lcIT Marco Rossi +39 345 678 9012
US English lcUS John Smith +1 (555) 123-4567
UK English lcUK James Wilson +44 7700 123456
German lcDE Hans Müller +49 170 1234567
French lcFR Pierre Dupont +33 6 12 34 56 78

Data Categories

Personal Data

// Names
GetRndFullName(lcIT)           // "Marco Rossi"
GetRndFirstName(lcUS)          // "John"
GetRndLastName(lcUK)           // "Wilson"

// Contact
GetRndEMailAddress(lcUS)       // "john.smith@gmail.com"
GetRndPhoneNumber(lcIT)        // "+39 345 678 9012"

// Address
GetRndAddress(lcUS)            // "123 Main Street, New York, NY 10001"
GetRndCity(lcIT)               // "Roma"
GetRndZipCode(lcUS)            // "90210"

// Demographics
GetRndDateOfBirth(18, 65)      // Random date for age 18-65
GetRndGender                   // "Male" or "Female"

Business Data

// Company
GetRndCompanyName              // "TechSolutions Inc."
GetRndIndustry                 // "Information Technology"
GetRndDepartment               // "Engineering"

// Employment
GetRndJobTitle                 // "Senior Software Developer"
GetRndSalary(30000, 150000)    // 75000

// Web
GetRndWebsite                  // "www.techsolutions.com"
GetRndDomain                   // "example.com"

Product Data

// Products
GetRndProductName              // "UltraTech Pro X500"
GetRndProductCategory          // "Electronics"
GetRndSKU                      // "SKU-A1B2C3D4"

// Pricing
GetRndPrice(9.99, 999.99)      // 299.99
GetRndDiscount(5, 50)          // 25 (percentage)

// Appearance
GetRndColorName                // "Ocean Blue"
GetRndColorHex                 // "#1E90FF"

// Description
GetRndProductDescription       // "High-performance device with advanced features..."

Technical Data

// Network
GetRndIPAddress(True)          // "192.168.1.100" (local)
GetRndIPAddress(False)         // "203.45.67.89" (public)
GetRndIPv6Address              // "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
GetRndMACAddress               // "00:1A:2B:3C:4D:5E"

// Web
GetRndURL                      // "https://www.example.com/page"
GetRndURL(False)               // "http://www.example.com/page" (non-secure)

// Identifiers
GetRndUUID                     // "550e8400-e29b-41d4-a716-446655440000"
GetRndHexColor                 // "#FF5733"

Financial Data (Testing Only)

// Credit Cards (fake, for testing only!)
GetRndCreditCardNumber('VISA')       // "4123-4567-8901-2345"
GetRndCreditCardNumber('MASTERCARD') // "5234-5678-9012-3456"
GetRndCreditCardNumber('AMEX')       // "3712-345678-90123"
GetRndCreditCardExpiry               // "12/27"
GetRndCVV                            // "123"

// Banking
GetRndIBAN('IT')                     // "IT85X1234567890123456789012"
GetRndIBAN('DE')                     // "DE89370400440532013000"
GetRndBankAccountNumber              // "1234567890"
GetRndBIC                            // "DEUTDEFF"

Validation Functions

Verify generated data matches expected formats:

if IsValidFakeEmail('john@example.com') then
  // Valid email format

if IsValidFakeIBAN('IT85X1234567890123456789012') then
  // Valid IBAN format

if IsValidFakeCreditCard('4123456789012345') then
  // Valid credit card format (Luhn check)

if IsValidFakePhoneNumber('+39 345 678 9012', lcIT) then
  // Valid Italian phone format

Real-World Examples

Seeding a Test Database

procedure SeedTestUsers(Count: Integer);
var
  I: Integer;
begin
  for I := 1 to Count do
  begin
    FQuery.SQL.Text :=
      'INSERT INTO users (name, email, phone, city) VALUES (:name, :email, :phone, :city)';
    FQuery.ParamByName('name').AsString := GetRndFullName(lcUS);
    FQuery.ParamByName('email').AsString := GetRndEMailAddress(lcUS);
    FQuery.ParamByName('phone').AsString := GetRndPhoneNumber(lcUS);
    FQuery.ParamByName('city').AsString := GetRndCity(lcUS);
    FQuery.ExecSQL;
  end;
end;

Creating Test Orders

function CreateTestOrder: TOrder;
begin
  Result := TOrder.Create;
  Result.CustomerName := GetRndFullName(lcIT);
  Result.CustomerEmail := GetRndEMailAddress(lcIT);
  Result.ShippingAddress := GetRndAddress(lcIT);
  Result.ProductName := GetRndProductName;
  Result.ProductSKU := GetRndSKU;
  Result.Price := GetRndPrice(10, 500);
  Result.Quantity := Random(5) + 1;
end;

API Mock Response

function GetMockUserJSON: string;
begin
  Result := Format(
    '{"id": "%s", "name": "%s", "email": "%s", "company": "%s", "title": "%s"}',
    [GetRndUUID, GetRndFullName(lcUS), GetRndEMailAddress(lcUS),
     GetRndCompanyName, GetRndJobTitle]
  );
end;

Load Testing Data

procedure GenerateLoadTestData;
var
  I: Integer;
  StartTime: TDateTime;
begin
  StartTime := Now;
  for I := 1 to 100000 do
  begin
    // Generate complete user profile
    GetRndFullName(lcUS);
    GetRndEMailAddress(lcUS);
    GetRndPhoneNumber(lcUS);
    GetRndAddress(lcUS);
    GetRndCompanyName;
    GetRndJobTitle;
  end;
  WriteLn(Format('Generated 100K profiles in %.2f seconds',
    [SecondSpan(StartTime, Now)]));
  // Typically ~0.5 seconds
end;

Delphi Compatibility

Works with Delphi XE2 and higher, including:

  • Delphi 12 Athens
  • Delphi 11 Alexandria
  • Delphi 10.x series
  • Delphi XE2-XE8

Platforms: Win32, Win64

Installation

  1. Download from GitHub
  2. Add source folder to Library Path
  3. Add uses RandomUtilsU; to your unit

Delphi Fake Data Utils is perfect for testing other open source projects by the same author:

Project Description Use Fake Data Utils for
DMVCFramework REST API framework for Delphi Generate test data for API endpoints, mock responses, integration tests
LoggerPro Async logging framework Create realistic log messages for testing appenders
DelphiRedisClient Complete Redis client Populate Redis with test data for caching scenarios
TemplatePro Powerful template engine Generate sample data for template rendering tests
DelphiGuard RAII memory management Use with automatic cleanup of test data generators

FAQ: Frequently Asked Questions

Is there a Faker library for Delphi?

Yes, Delphi Fake Data Utils is the Faker equivalent for Delphi. It generates realistic fake data including names, emails, phones, addresses, companies, products, and financial data.

How do I generate random test data in Delphi?

Use Delphi Fake Data Utils:

uses RandomUtilsU;
var Name := GetRndFullName(lcUS);     // "John Smith"
var Email := GetRndEMailAddress(lcUS); // "john.smith@gmail.com"

How do I seed a test database in Delphi?

Loop through and insert fake data:

for I := 1 to 1000 do
begin
  Query.ParamByName('name').AsString := GetRndFullName(lcUS);
  Query.ParamByName('email').AsString := GetRndEMailAddress(lcUS);
  Query.ExecSQL;
end;

Does Delphi Fake Data Utils support multiple languages?

Yes, it supports 5 locales: Italian (lcIT), US English (lcUS), UK English (lcUK), German (lcDE), and French (lcFR).

How fast is Delphi Fake Data Utils?

Very fast - it can generate 10,000 names in approximately 0.05 seconds, making it suitable for load testing scenarios.

Can I generate fake credit card numbers for testing?

Yes, use GetRndCreditCardNumber('VISA') for VISA, MASTERCARD, or AMEX test numbers. These are for testing only and won’t work for real transactions.

Can I generate fake IBANs for testing?

Yes, use GetRndIBAN('IT') for Italian IBANs, or specify other country codes like ‘DE’, ‘FR’, ‘UK’.

How do I validate generated fake data?

Use built-in validators:

if IsValidFakeEmail(Email) then ...
if IsValidFakeIBAN(IBAN) then ...
if IsValidFakeCreditCard(CardNumber) then ...

Delphi Fake Data Utils - Realistic test data for Delphi. Multi-locale. High-performance. Open-source.

Comments

comments powered by Disqus