Gerador de dados fictícios
Gere dados fictícios que passam na validação: cartões Luhn, IBAN mod-97, UUID reais. Com semente e reproduzível: JSON, CSV, NDJSON ou SQL.
[
{
"id": "018cc251-f400-79a7-abdf-9623646f1963",
"first_name": "Ruby",
"last_name": "Long",
"email": "[email protected]",
"country": "IE",
"created_at": "2024-04-13T08:13:34Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc251-f7e8-7727-8c38-6095cbcabdb9",
"first_name": "Ellen",
"last_name": "Hoffman",
"email": "[email protected]",
"country": "US",
"created_at": "2024-06-28T10:45:21Z",
"last_seen_at": "2024-10-31T16:44:09Z",
"is_active": false
},
{
"id": "018cc251-fbd0-7056-ad40-e80a775668cc",
"first_name": "Keith",
"last_name": "Hudson",
"email": "[email protected]",
"country": "AR",
"created_at": "2025-08-11T01:04:04Z",
"last_seen_at": "2025-09-19T15:18:41Z",
"is_active": true
},
{
"id": "018cc251-ffb8-74a1-b4c8-83cc6bd2ae90",
"first_name": "Thomas",
"last_name": "Moore",
"email": "[email protected]",
"country": "BE",
"created_at": "2025-02-21T16:27:55Z",
"last_seen_at": "2025-04-28T03:30:59Z",
"is_active": true
},
{
"id": "018cc252-03a0-7309-8795-f9f277a8f8c0",
"first_name": "Benjamin",
"last_name": "Austin",
"email": "[email protected]",
"country": "MX",
"created_at": "2024-06-15T11:04:56Z",
"last_seen_at": "2025-06-30T22:00:26Z",
"is_active": true
},
{
"id": "018cc252-0788-7658-937d-58b138c92232",
"first_name": "Barbara",
"last_name": "Flores",
"email": "[email protected]",
"country": "GR",
"created_at": "2024-04-17T19:41:08Z",
"last_seen_at": "2025-01-13T23:55:46Z",
"is_active": true
},
{
"id": "018cc252-0b70-7c3a-96ae-719ee90a05af",
"first_name": "Allen",
"last_name": "Vazquez",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-09-18T13:23:49Z",
"last_seen_at": "2026-05-04T06:32:51Z",
"is_active": false
},
{
"id": "018cc252-0f58-7dfd-8623-52572f04ce20",
"first_name": "Harry",
"last_name": "Nichols",
"email": "[email protected]",
"country": "SG",
"created_at": "2026-06-26T14:48:47Z",
"last_seen_at": "2026-06-30T12:56:13Z",
"is_active": false
},
{
"id": "018cc252-1340-738f-b536-279444cb4512",
"first_name": "Elaine",
"last_name": "Wagner",
"email": "[email protected]",
"country": "UA",
"created_at": "2025-05-09T14:48:44Z",
"last_seen_at": "2026-05-19T14:58:47Z",
"is_active": true
},
{
"id": "018cc252-1728-7d96-8856-b87ee9d904e9",
"first_name": "Fred",
"last_name": "Fisher",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-11-25T05:27:13Z",
"last_seen_at": "2026-04-04T05:36:09Z",
"is_active": true
},
{
"id": "018cc252-1b10-7baa-a79b-9567cf1366fd",
"first_name": "Lois",
"last_name": "Nelson",
"email": "[email protected]",
"country": "FR",
"created_at": "2025-05-08T16:32:25Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-1ef8-7c8c-b859-cea655faef9c",
"first_name": "Mark",
"last_name": "Cunningham",
"email": "[email protected]",
"country": "FI",
"created_at": "2026-02-21T11:09:02Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-22e0-77bf-bc1c-40120a5b29c4",
"first_name": "Anne",
"last_name": "Flores",
"email": "[email protected]",
"country": "KR",
"created_at": "2025-08-02T22:55:20Z",
"last_seen_at": "2025-10-27T03:27:52Z",
"is_active": true
},
{
"id": "018cc252-26c8-7220-9453-1804e8ce88c4",
"first_name": "Arthur",
"last_name": "Crawford",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-02-26T04:55:03Z",
"last_seen_at": "2025-07-25T07:05:17Z",
"is_active": true
},
{
"id": "018cc252-2ab0-75a8-8a2b-28833306b87c",
"first_name": "Ronald",
"last_name": "Hansen",
"email": "[email protected]",
"country": "KR",
"created_at": "2025-03-09T06:31:44Z",
"last_seen_at": "2026-01-04T03:11:24Z",
"is_active": true
},
{
"id": "018cc252-2e98-7c38-93e2-9f80d039eb75",
"first_name": "Donna",
"last_name": "Porter",
"email": "[email protected]",
"country": "IE",
"created_at": "2026-01-12T06:55:22Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-3280-77a0-8152-8f5a9584a581",
"first_name": "Carol",
"last_name": "Wells",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-07-20T23:09:02Z",
"last_seen_at": "2026-01-24T23:04:38Z",
"is_active": true
},
{
"id": "018cc252-3668-7208-8bbe-619dada6b7e0",
"first_name": "Sheila",
"last_name": "Lee",
"email": "[email protected]",
"country": "PT",
"created_at": "2025-01-05T20:09:52Z",
"last_seen_at": "2025-04-08T12:02:09Z",
"is_active": false
},
{
"id": "018cc252-3a50-7b11-9261-0c17e909f6fb",
"first_name": "Jack",
"last_name": "Evans",
"email": "[email protected]",
"country": "KE",
"created_at": "2025-12-29T14:31:00Z",
"last_seen_at": "2026-03-28T14:30:43Z",
"is_active": true
},
{
"id": "018cc252-3e38-7f22-8cc7-0dd649d26379",
"first_name": "Randy",
"last_name": "Harris",
"email": "[email protected]",
"country": "GB",
"created_at": "2026-06-26T19:25:04Z",
"last_seen_at": "2026-06-30T08:39:51Z",
"is_active": true
},
{
"id": "018cc252-4220-7e86-8dae-b25b4f837713",
"first_name": "Josephine",
"last_name": "Castro",
"email": "[email protected]",
"country": "DK",
"created_at": "2024-02-07T22:33:55Z",
"last_seen_at": "2026-02-23T13:56:30Z",
"is_active": true
},
{
"id": "018cc252-4608-7120-abd5-535883ca01b9",
"first_name": "Edith",
"last_name": "Graham",
"email": "[email protected]",
"country": "CN",
"created_at": "2024-04-29T08:59:26Z",
"last_seen_at": "2024-06-17T10:20:45Z",
"is_active": true
},
{
"id": "018cc252-49f0-77f7-9bf9-17e87b0a09c6",
"first_name": "Tracy",
"last_name": "Willis",
"email": "[email protected]",
"country": "PT",
"created_at": "2024-03-21T07:42:06Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-4dd8-75c8-8b04-1e0fb891e435",
"first_name": "Irene",
"last_name": "Larson",
"email": "[email protected]",
"country": "AT",
"created_at": "2025-06-04T15:01:38Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-51c0-7be0-a6ca-12bc704a2b3f",
"first_name": "Betty",
"last_name": "Morrison",
"email": "[email protected]",
"country": "ID",
"created_at": "2025-11-11T21:56:19Z",
"last_seen_at": "2026-03-29T03:33:49Z",
"is_active": true
},
{
"id": "018cc252-55a8-736d-a7b2-8bec744ecf74",
"first_name": "Kevin",
"last_name": "Cox",
"email": "[email protected]",
"country": "GR",
"created_at": "2025-10-06T23:28:21Z",
"last_seen_at": null,
"is_active": false
},
{
"id": "018cc252-5990-73ca-a2d3-89bf2b8eb5f6",
"first_name": "Sean",
"last_name": "Carr",
"email": "[email protected]",
"country": "KR",
"created_at": "2026-02-19T23:27:53Z",
"last_seen_at": "2026-03-02T22:16:30Z",
"is_active": true
},
{
"id": "018cc252-5d78-79e2-bd4d-d8b6867867dc",
"first_name": "Heather",
"last_name": "Ferguson",
"email": "[email protected]",
"country": "IL",
"created_at": "2024-07-07T01:39:16Z",
"last_seen_at": "2025-09-21T19:17:00Z",
"is_active": false
},
{
"id": "018cc252-6160-78f8-a9af-d73b74581b86",
"first_name": "Rose",
"last_name": "Chen",
"email": "[email protected]",
"country": "DE",
"created_at": "2024-09-07T16:16:48Z",
"last_seen_at": "2024-10-02T08:29:39Z",
"is_active": true
},
{
"id": "018cc252-6548-71f0-ab4f-c824fd842a67",
"first_name": "Maria",
"last_name": "Brooks",
"email": "[email protected]",
"country": "FR",
"created_at": "2024-06-29T06:22:30Z",
"last_seen_at": "2025-12-22T00:38:13Z",
"is_active": true
},
{
"id": "018cc252-6930-7067-b516-480051493ec0",
"first_name": "Donna",
"last_name": "Hamilton",
"email": "[email protected]",
"country": "IE",
"created_at": "2024-09-01T09:09:40Z",
"last_seen_at": "2025-03-29T23:26:22Z",
"is_active": false
},
{
"id": "018cc252-6d18-7de1-bae1-21dc471405fa",
"first_name": "Rachel",
"last_name": "Wagner",
"email": "[email protected]",
"country": "IE",
"created_at": "2026-05-31T02:06:02Z",
"last_seen_at": "2026-06-17T16:37:27Z",
"is_active": false
},
{
"id": "018cc252-7100-752d-bc4e-c4e5bd755743",
"first_name": "Philip",
"last_name": "Jones",
"email": "[email protected]",
"country": "NO",
"created_at": "2024-10-21T12:22:35Z",
"last_seen_at": "2025-02-15T07:00:10Z",
"is_active": true
},
{
"id": "018cc252-74e8-7b4d-b9cf-4e8e03d1e269",
"first_name": "Bonnie",
"last_name": "Carter",
"email": "[email protected]",
"country": "PT",
"created_at": "2026-05-28T06:16:25Z",
"last_seen_at": "2026-06-26T21:36:12Z",
"is_active": true
},
{
"id": "018cc252-78d0-708b-a96f-d9f474e95238",
"first_name": "Douglas",
"last_name": "Evans",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-02-18T20:36:33Z",
"last_seen_at": "2024-10-31T01:37:50Z",
"is_active": true
},
{
"id": "018cc252-7cb8-7865-96fa-e9681611dbed",
"first_name": "Theresa",
"last_name": "Larson",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-11-21T08:57:18Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-80a0-7eca-80cd-7159faf3467f",
"first_name": "Gladys",
"last_name": "Reyes",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-04-27T11:34:46Z",
"last_seen_at": "2026-03-09T18:39:31Z",
"is_active": true
},
{
"id": "018cc252-8488-76b2-9271-dabf0da27b4f",
"first_name": "Bonnie",
"last_name": "Cook",
"email": "[email protected]",
"country": "AT",
"created_at": "2024-01-13T17:42:35Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-8870-70d0-ab33-72cd838e6603",
"first_name": "Diane",
"last_name": "Wells",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-05-02T11:22:23Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-8c58-725c-980d-f206b971497b",
"first_name": "Gloria",
"last_name": "Woods",
"email": "[email protected]",
"country": "IT",
"created_at": "2025-06-27T01:56:54Z",
"last_seen_at": "2025-09-04T17:13:00Z",
"is_active": true
},
{
"id": "018cc252-9040-786d-90d1-5c9bae512dbf",
"first_name": "Alan",
"last_name": "Rodriguez",
"email": "[email protected]",
"country": "DK",
"created_at": "2026-03-29T17:48:08Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-9428-7b58-8dde-508b603b97d8",
"first_name": "Leonard",
"last_name": "Jones",
"email": "[email protected]",
"country": "MX",
"created_at": "2026-02-06T22:38:18Z",
"last_seen_at": "2026-04-27T00:46:32Z",
"is_active": true
},
{
"id": "018cc252-9810-7c69-8024-23852691d72c",
"first_name": "Maria",
"last_name": "Davis",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-03-30T14:01:05Z",
"last_seen_at": "2025-04-24T10:25:01Z",
"is_active": true
},
{
"id": "018cc252-9bf8-7e3a-a37a-06b1a661a0dc",
"first_name": "Carl",
"last_name": "Duncan",
"email": "[email protected]",
"country": "KE",
"created_at": "2026-03-30T06:02:52Z",
"last_seen_at": "2026-05-16T00:15:55Z",
"is_active": false
},
{
"id": "018cc252-9fe0-7a01-8a38-5d3e36f9eca3",
"first_name": "Phillip",
"last_name": "Harrison",
"email": "[email protected]",
"country": "DK",
"created_at": "2024-07-12T01:56:26Z",
"last_seen_at": "2026-05-28T21:32:17Z",
"is_active": true
},
{
"id": "018cc252-a3c8-7977-a212-1c82b978ccbe",
"first_name": "Kim",
"last_name": "Franklin",
"email": "[email protected]",
"country": "KE",
"created_at": "2024-09-23T15:16:03Z",
"last_seen_at": "2025-08-20T03:29:07Z",
"is_active": true
},
{
"id": "018cc252-a7b0-78f6-bb2a-d194bc638e71",
"first_name": "Patrick",
"last_name": "Coleman",
"email": "[email protected]",
"country": "ID",
"created_at": "2025-01-06T09:04:26Z",
"last_seen_at": "2025-07-21T22:36:07Z",
"is_active": true
},
{
"id": "018cc252-ab98-7b5b-8f5c-8b6a21b71208",
"first_name": "Harry",
"last_name": "Martin",
"email": "[email protected]",
"country": "ES",
"created_at": "2026-02-21T17:42:10Z",
"last_seen_at": "2026-05-16T20:52:12Z",
"is_active": true
},
{
"id": "018cc252-af80-7504-8719-59c6e3efd9c3",
"first_name": "Carlos",
"last_name": "Gibson",
"email": "[email protected]",
"country": "ZA",
"created_at": "2024-01-14T06:39:34Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-b368-7525-9a9c-a09c2f8c2c8b",
"first_name": "Jean",
"last_name": "Morales",
"email": "[email protected]",
"country": "CA",
"created_at": "2025-06-05T13:13:54Z",
"last_seen_at": "2025-07-18T07:30:36Z",
"is_active": true
},
{
"id": "018cc252-b750-76bd-81cc-42435c3231bd",
"first_name": "Ernest",
"last_name": "Cooper",
"email": "[email protected]",
"country": "FR",
"created_at": "2026-06-30T05:15:30Z",
"last_seen_at": "2026-06-30T22:07:31Z",
"is_active": true
},
{
"id": "018cc252-bb38-7a65-8fdd-29417173ce08",
"first_name": "John",
"last_name": "Wallace",
"email": "[email protected]",
"country": "GR",
"created_at": "2024-01-01T11:53:11Z",
"last_seen_at": "2025-05-13T01:10:51Z",
"is_active": false
},
{
"id": "018cc252-bf20-7253-a075-e01c6d997ffd",
"first_name": "Lee",
"last_name": "Brooks",
"email": "[email protected]",
"country": "AU",
"created_at": "2024-03-20T07:03:24Z",
"last_seen_at": "2025-04-29T10:30:14Z",
"is_active": true
},
{
"id": "018cc252-c308-7709-a61e-916f4cb44f86",
"first_name": "Antonio",
"last_name": "Evans",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-09-17T01:49:49Z",
"last_seen_at": "2026-04-27T19:54:08Z",
"is_active": true
},
{
"id": "018cc252-c6f0-7095-be95-c60913b0062d",
"first_name": "Jose",
"last_name": "Porter",
"email": "[email protected]",
"country": "ZA",
"created_at": "2024-06-01T00:33:54Z",
"last_seen_at": "2024-09-30T08:59:58Z",
"is_active": false
},
{
"id": "018cc252-cad8-7565-b5d8-117f4a6fb217",
"first_name": "Eric",
"last_name": "Ward",
"email": "[email protected]",
"country": "TR",
"created_at": "2024-03-06T08:01:45Z",
"last_seen_at": "2024-10-07T12:38:03Z",
"is_active": true
},
{
"id": "018cc252-cec0-79ae-adaa-96058dd4aabe",
"first_name": "Marjorie",
"last_name": "Cox",
"email": "[email protected]",
"country": "NG",
"created_at": "2026-06-08T11:01:04Z",
"last_seen_at": "2026-06-20T16:41:37Z",
"is_active": true
},
{
"id": "018cc252-d2a8-7d31-bab8-63bfaa7342bd",
"first_name": "Bryan",
"last_name": "Pena",
"email": "[email protected]",
"country": "IT",
"created_at": "2024-01-06T14:25:41Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-d690-7e1b-a275-f48a8c1ccbf6",
"first_name": "Catherine",
"last_name": "Munoz",
"email": "[email protected]",
"country": "AU",
"created_at": "2026-05-30T07:29:25Z",
"last_seen_at": "2026-06-23T08:23:39Z",
"is_active": true
},
{
"id": "018cc252-da78-7c22-9180-f137d46ec702",
"first_name": "Joyce",
"last_name": "Jordan",
"email": "[email protected]",
"country": "TR",
"created_at": "2025-01-13T19:52:26Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-de60-7bc5-907f-8eebca9226bf",
"first_name": "Jennifer",
"last_name": "Riley",
"email": "[email protected]",
"country": "AT",
"created_at": "2026-02-21T06:27:48Z",
"last_seen_at": "2026-04-30T10:23:57Z",
"is_active": true
},
{
"id": "018cc252-e248-7464-86b7-54ee11fc6051",
"first_name": "Amanda",
"last_name": "Daniels",
"email": "[email protected]",
"country": "IL",
"created_at": "2025-04-29T02:18:30Z",
"last_seen_at": "2026-04-17T18:37:07Z",
"is_active": false
},
{
"id": "018cc252-e630-7bf3-ab8d-a72175e7c3fb",
"first_name": "Laura",
"last_name": "Alvarado",
"email": "[email protected]",
"country": "PT",
"created_at": "2024-08-26T17:26:51Z",
"last_seen_at": "2025-09-16T12:46:07Z",
"is_active": true
},
{
"id": "018cc252-ea18-74fb-955a-5d6d42ed1760",
"first_name": "Andrea",
"last_name": "Turner",
"email": "[email protected]",
"country": "CA",
"created_at": "2024-07-13T08:04:19Z",
"last_seen_at": "2025-01-08T17:24:13Z",
"is_active": true
},
{
"id": "018cc252-ee00-7216-953a-2094b3402b1e",
"first_name": "Margaret",
"last_name": "Jackson",
"email": "[email protected]",
"country": "NZ",
"created_at": "2025-07-14T00:05:54Z",
"last_seen_at": "2026-05-05T09:44:04Z",
"is_active": true
},
{
"id": "018cc252-f1e8-7262-91aa-5818265220ca",
"first_name": "Rose",
"last_name": "Johnson",
"email": "[email protected]",
"country": "KR",
"created_at": "2024-07-18T02:49:21Z",
"last_seen_at": "2025-04-18T08:52:53Z",
"is_active": true
},
{
"id": "018cc252-f5d0-72f1-ba49-a52514f881dd",
"first_name": "Fred",
"last_name": "George",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-10-26T23:11:53Z",
"last_seen_at": "2025-11-05T21:15:27Z",
"is_active": true
},
{
"id": "018cc252-f9b8-7173-b05d-540124a4fc47",
"first_name": "Sara",
"last_name": "Greene",
"email": "[email protected]",
"country": "PT",
"created_at": "2026-04-26T10:11:22Z",
"last_seen_at": "2026-05-07T04:01:08Z",
"is_active": true
},
{
"id": "018cc252-fda0-7ed5-a24a-3f179c69fc3c",
"first_name": "Jesse",
"last_name": "Bennett",
"email": "[email protected]",
"country": "SG",
"created_at": "2025-10-08T16:19:51Z",
"last_seen_at": "2026-03-04T05:50:50Z",
"is_active": true
},
{
"id": "018cc253-0188-74dd-a728-ed228fc827ac",
"first_name": "Louise",
"last_name": "Santos",
"email": "[email protected]",
"country": "FI",
"created_at": "2026-05-29T18:38:35Z",
"last_seen_at": "2026-06-01T15:33:29Z",
"is_active": true
},
{
"id": "018cc253-0570-7408-b582-07fbebeacbbf",
"first_name": "Scott",
"last_name": "Grant",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-02-11T17:35:11Z",
"last_seen_at": "2025-08-06T23:23:49Z",
"is_active": true
},
{
"id": "018cc253-0958-7c12-b38e-edc7af958916",
"first_name": "Judy",
"last_nA mostrar os primeiros 20000 de 28086 caracteres. Copiar e transferir levam tudo.
O correio vai para example.com, os telefones para o bloco 555-0100, os endereços para as redes de documentação e os cartões para os BIN de teste publicados: cada valor predefinido aqui é um intervalo reservado por uma norma, por isso nada do que é gerado pode pertencer a uma pessoa real.
Dados que passam nos seus validadores
A queixa habitual sobre dados de teste gerados não é parecerem falsos. É falharem. Um número de cartão que nenhuma biblioteca de pagamentos aceitará, um IBAN que um formulário bancário rejeita, um ISBN que um leitor de códigos de barras não consegue ler, um UUID cujo dígito de versão é apenas aquilo em que os bytes aleatórios calharam. Acaba por corrigir o fixture à mão, e nessa altura o gerador custou mais do que poupou.
Todos os valores aqui para os quais uma norma publicada define uma verificação trazem a verificação correta. É pouca aritmética e muda aquilo para que os dados servem: pode apontar-lhes a sua validação a sério.
- Os números de cartão trazem o dígito de controlo de Luhn da ISO/IEC 7812-1, calculado sobre os dígitos que o precedem, e assentam no BIN de teste publicado da rede que escolher.
- Os IBAN satisfazem a ISO 7064 mod-97 — os dígitos de controlo são escolhidos para que o número reordenado e com as letras expandidas deixe resto 1 — e têm exatamente o comprimento que esse país regista, algo que o mod-97 sozinho não apanharia.
- Os valores ISBN-13 e EAN-13 trazem o dígito de controlo com os pesos alternados 1 e 3, sob um dos dois prefixos GS1 atribuídos ao sistema ISBN.
- Os UUID trazem o nibble de versão e os dois bits de variante que a RFC 9562 exige, por isso um analisador anuncia v4 ou v7 em vez de se encolher.
- Endereços, marcas temporais, versões semânticas e códigos de moeda são escritos na forma que a sua norma define, não numa aproximação dela.
Nada disto torna os dados verdadeiros. Torna-os bem formados, que é a única propriedade que um fixture pode honestamente reclamar.
A semente, e porque é nela que está tudo
Um gerador que dá linhas diferentes de cada vez é um brinquedo. Assim que os dados entram num teste, numa demonstração ou numa captura de ecrã, é preciso poder recuperá-los: depois de recarregar, na máquina de um colega, na integração contínua daqui a um ano.
Por isso a aleatoriedade aqui tem semente. A semente é uma cadeia que escolhe, e a mesma semente com o mesmo esquema e o mesmo número de linhas produz em qualquer lado uma saída idêntica byte a byte. O gerador é o xoshiro128**, semeado através do splitmix64; ambos são algoritmos publicados com implementações de referência, e esta página é testada contra saída transcrita dessas referências e não contra si própria.
seed "orders-2026" same rows, every time, everywhere seed "orders-2027" a completely different set field stream = hash(seed, field name) row N of a field depends on nothing but the seed, the name and N
Vale a pena ler essa última linha duas vezes, porque é o que torna a ferramenta utilizável e não apenas reproduzível. Cada campo tira do seu próprio fluxo, ligado ao seu nome. Acrescente uma coluna e todas as existentes saem idênticas. Suba as linhas de cem para mil e as primeiras cem são as que já tinha. Um fixture versionado ontem continua a coincidir depois de hoje ter alargado o esquema.
O preço honesto desta ligação ao nome é que mudar o nome de um campo substitui os seus dados, já que o nome é metade da semente. A proporção de vazios é a única definição deliberadamente isenta: a decisão de esvaziar um valor é tomada depois de o valor ser tirado, por isso ligar os vazios remove algumas linhas sem deslocar as restantes.
De tudo isto decorre diretamente um aviso. Um gerador com semente é previsível por desenho, e essa é a vantagem. Nada do que produz pode alguma vez servir de palavra-passe, token ou chave. Para isso use um gerador que tire da fonte criptográfica da plataforma.
Intervalos reservados para que os seus dados não possam ser reais
Um gerador que emite endereços num domínio de correio real entrega-lhe uma arma carregada. As suítes de testes enviam correio. Os ambientes de pré-produção acabam apontados ao SMTP de produção. Os testes de carga martelam o endereço IP que estiver no fixture. Quando o valor pertence a alguém, o acidente chega-lhe.
Os organismos de normalização anteciparam isto e puseram de lado intervalos que é garantido nunca virem a ser atribuídos. Todos os valores predefinidos aqui tiram de um deles:
- O correio aterra em example.com, example.net e example.org, que a RFC 2606 reserva para sempre, a par dos domínios de topo .test, .example e .invalid que a RFC 6761 acrescenta.
- Os números de telefone usam 555-0100 a 555-0199, o bloco que a numeração norte-americana reserva para a ficção — e é por isso que os filmes o usam.
- Os endereços IPv4 vêm de 192.0.2.0/24, 198.51.100.0/24 e 203.0.113.0/24, as três redes de documentação da RFC 5737, e os IPv6 de 2001:db8::/32 segundo a RFC 3849.
- Os endereços MAC ligam o bit de administração local, que o IEEE garante nunca atribuir; o bloco de documentação da RFC 7042 também está disponível, embora tenha apenas 256 endereços.
- Os números de cartão são construídos sobre os quatro BIN de teste publicados e não sobre um intervalo de emissão ativo, por isso um número válido segundo Luhn não pode coincidir com um cartão real.
Cada um deles pode ser substituído quando tiver um motivo: um domínio seu para um ambiente de pré-produção, um bloco CIDR que corresponda à sua rede. O valor predefinido é a resposta segura, e a substituição fica como uma decisão sua e deliberada.
Os nomes e lugares vêm das distribuições de nomes publicadas pelo Census Bureau dos Estados Unidos e da sua lista de municípios constituídos. São nomes ingleses comuns, o que significa que um nome gerado pode coincidir com o de uma pessoa real — como qualquer nome pode. Trate a saída pelo que ela é: cadeias plausíveis, não pessoas.
Campos que se referem uns aos outros
Colunas independentes produzem linhas que se desfazem a olho. Uma utilizadora chamada Dana Levy cujo endereço de correio nada tem que ver com o seu nome parece avariada numa captura de ecrã, e uma marca de atualização anterior à de criação fará falhar uma asserção a sério.
Em vez de um caso especial por cada par há um único mecanismo: qualquer definição marcada como aceitando referências pode nomear outro campo entre chavetas duplas, e é preenchida a partir da mesma linha. Os campos são então gerados por ordem de dependências e não pela ordem em que os listou, e um círculo de referências é comunicado como erro de esquema em vez de bloquear.
Vai mais longe do que o correio. Um campo modelo constrói qualquer cadeia que queira a partir de outras colunas, com uma transformação opcional de maiúsculas. O limite inferior ou superior de um campo de data pode nomear outro campo de data, e é assim que se obtém uma linha temporal coerente. E quando um valor referido está vazio, o campo que dele depende também está, em vez de recuar em silêncio para uma janela predefinida que o esquema nunca mencionou.
Tirar cá para fora: JSON, NDJSON, CSV, SQL
JSON é o óbvio e sai indentado ou numa só linha. NDJSON — um objeto compacto por linha — é o que as cadeias de registos e os importadores em fluxo esperam, e é o formato a colar numa ferramenta que lê um registo de cada vez.
O CSV segue a RFC 4180: os campos só levam aspas quando contêm uma vírgula, umas aspas ou uma quebra de linha, umas aspas interiores são duplicadas, e as linhas terminam em CRLF. É a forma em que as folhas de cálculo e os carregadores em massa das bases de dados concordam.
É no SQL que os geradores costumam ser desleixados, porque a resposta certa depende do dialeto. As aspas dos identificadores diferem — PostgreSQL e SQLite levam aspas duplas, MySQL leva plicas invertidas, SQL Server leva parênteses retos — e cada um duplica o seu próprio carácter dentro de um nome. As cadeias literais duplicam a plica em todo o lado, mas o MySQL lê ainda a barra invertida como escape a menos que NO_BACKSLASH_ESCAPES esteja ativo, por isso um caminho do Windows terminado em barra engoliria a plica de fecho. Os booleanos são a terceira divisão: o PostgreSQL tem um tipo booleano a sério e os outros querem 1 e 0. E o SQL Server recusa um construtor de tabela com mais de mil linhas, por isso uma exportação grande sai como várias instruções em vez de uma que falha.
PostgreSQL INSERT INTO "records" ("id", "ok") VALUES (1, TRUE);
MySQL INSERT INTO `records` (`id`, `ok`) VALUES (1, 1);
SQLite INSERT INTO "records" ("id", "ok") VALUES (1, 1);
SQL Server INSERT INTO [records] ([id], [ok]) VALUES (1, 1);O esquema é um ficheiro
O painel ao lado do construtor é o mesmo esquema escrito em JSON, e funciona nos dois sentidos: edite os campos e ele atualiza-se, cole um esquema e o construtor acompanha. As opções deixadas no valor predefinido são omitidas, por isso o que relê são as decisões que tomou e não todos os botões que a ferramenta tem.
Esse ficheiro, com a semente que contém, é a unidade reproduzível completa. Guarde-o ao lado do teste que consome os dados e o fixture passa a ser algo que um revisor pode ler e um colega pode voltar a gerar, em vez de um bloco grande de valores que ninguém sabe explicar.
Perguntas frequentes
- Os números de cartão de crédito são reais?
- São válidos e não são reais. Cada um traz um dígito de controlo de Luhn correto, por isso uma biblioteca de pagamentos aceita o seu formato, e cada um é construído sobre um dos quatro BIN de teste publicados em vez de um intervalo de emissão ativo, por isso não pode coincidir com um cartão que alguém tenha. Não autorizam pagamento nenhum em lado nenhum.
- A mesma semente dá-me mesmo os mesmos dados para o ano?
- Sim. O gerador é um algoritmo publicado com uma implementação de referência fixa, não uma interface do navegador cujo comportamento possa mudar, e esta página é testada contra saída transcrita dessa referência. Nada lê o relógio: os intervalos de datas são valores literais no esquema. Guarde o JSON do esquema e a semente que ele contém e as linhas voltam exatamente.
- Porque é que acrescentar uma coluna não mudou mais nada?
- Porque cada campo tira do seu próprio fluxo, ligado à semente e ao nome do campo. É deliberado: um fixture que se baralha de novo sempre que alarga o esquema não se pode manter num repositório. A mesma propriedade faz com que aumentar as linhas deixe intactas as anteriores.
- Mudei o nome de um campo e os dados dele mudaram.
- Decorre do mesmo desenho — o nome do campo é metade da chave do seu fluxo. Se quer manter os valores, mude o nome da coluna mais à frente na cadeia, ou aceite a nova extração. Não há forma de ter ao mesmo tempo estabilidade na mudança de nome e na reordenação sem um identificador escondido que o ficheiro de esquema teria depois de transportar.
- Posso gerar com isto uma palavra-passe ou uma chave de API?
- Não. Tudo aqui vem de um gerador pseudoaleatório com semente, previsível por desenho, e é exatamente por isso que a saída é reproduzível. Um segredo tem de vir da fonte criptográfica da plataforma. Use um gerador de tokens dedicado para isso.
- Como faço para o correio corresponder ao nome?
- Acrescente um campo modelo e escreva as outras colunas entre chavetas duplas — algo como {{first_name}}.{{last_name}}@example.com — e depois ponha a transformação em minúsculas. Os campos são gerados por ordem de dependências, por isso o modelo pode nomear uma coluna que aparece depois dele na lista.
- Quantas linhas consegue produzir?
- Dez mil, com até quarenta campos. A geração é rápida o suficiente para ficar na linha de execução principal com este tamanho; o que fica mesmo incómodo é o texto resultante, e é por isso que o painel mostra uma pré-visualização cortada enquanto copiar e transferir levam tudo.
- Alguma coisa disto sai do meu navegador?
- Não. O gerador, o conjunto de nomes e todos os formatos de saída correm como JavaScript na página. Não há chamada nenhuma a um servidor, e nada do que escrever no esquema é enviado para lado nenhum.