This repository has been archived on 2026-02-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
synthetic-consumer-data/utils/generateConsumerSeed.ts

116 lines
2.7 KiB
TypeScript

import moment, { Moment } from 'moment';
const PROVINCE_CODES = [
'00', // Roma
'04', // Latina
'10', // Torino
'12', // Cuneo
'16', // Genova
'20', // Milano
'24', // Bergamo
'25', // Brescia
'30', // Venezia
'31', // Treviso
'35', // Padova
'40', // Bologna
'45', // Rovigo
'47', // Forli-Cesena
'48', // Ravenna
'50', // Firenze
'51', // Pistoia
'52', // Arezzo
'53', // Siena
'54', // Massa-Carrara
'55', // Lucca
'56', // Pisa
'57', // Livorno
'58', // Grosseto
'60', // Ancona
'61', // Pesaro
'63', // Ascoli Piceno
'65', // Pescara
'66', // Chieti
'67', // L'Aquila
'70', // Bari
'71', // Foggia
'72', // Brindisi
'73', // Lecce
'74', // Taranto
'75', // Matera
'80', // Napoli
'81', // Caserta
'82', // Benevento
'83', // Avellino
'84', // Salerno
'87', // Cosenza
'88', // Catanzaro
'89', // Reggio Calabria
'90', // Palermo
'91', // Trapani
'92', // Agrigento
'93', // Caltanissetta
'94', // Enna
'95', // Catania
'96', // Siracusa
'97', // Ragusa
'98' // Messina
];
export function generateRandomCAP(): string {
const provinceCode =
PROVINCE_CODES[Math.floor(Math.random() * PROVINCE_CODES.length)];
const lastThreeDigits = Math.floor(Math.random() * 1000)
.toString()
.padStart(3, '0');
return `${provinceCode}${lastThreeDigits}`;
}
function generateLetters(): string {
const consonants = 'BCDFGLMNPRSTVZ';
const vowels = 'AEIOU';
let result = '';
const consonantCount = 4 + Math.floor(Math.random() * 2);
for (let i = 0; i < consonantCount; i++) {
result += consonants[Math.floor(Math.random() * consonants.length)];
}
const extraVowels = 3 + Math.floor(Math.random() * 2);
for (let i = 0; i < extraVowels; i++) {
result += vowels[Math.floor(Math.random() * vowels.length)];
}
return result
.split('')
.sort(() => Math.random() - 0.5)
.join('');
}
function generateBirthYear(): Moment {
const currentYear = moment().year();
const minYear = currentYear - 50;
const maxYear = currentYear - 20;
const year = Math.floor(Math.random() * (maxYear - minYear) + minYear);
const startDate = moment([year, 0, 1]); // January 1st
const endDate = moment([year, 11, 31]); // December 31st
const startTimestamp = startDate.valueOf();
const endTimestamp = endDate.valueOf();
const randomTimestamp =
startTimestamp + Math.random() * (endTimestamp - startTimestamp);
return moment(randomTimestamp).startOf('day');
}
export function generateConsumerSeed() {
const letters = generateLetters();
const birthday = generateBirthYear();
const zipCode = generateRandomCAP();
return { letters, birthday, zipCode };
}