---
name: genera-id
description: Usare quando l'utente deve generare un identificatore casuale alfanumerico univoco.
---

# Genera ID

Questa skill genera un ID casuale alfanumerico. Utile per creare identificatori univoci, generare chiavi temporanee, aggiungere ID a elementi DOM, sistemi di tracciamento.

## Procedura

1. **Generare un ID**: Usare `generaId(lunghezza)`
2. **Specificare la lunghezza**: Numero di caratteri desiderati (predefinito: 8)
3. **Gestire il risultato**: Restituisce una stringa con l'ID generato

## Regole

- `lunghezza` deve essere un numero intero positivo (predefinito: 8)
- Restituisce sempre una stringa
- Usa caratteri alfanumerici: A-Z, a-z, 0-9 (62 caratteri possibili)
- **Non garantisce univocità assoluta** (solo probabilistica)
- Ogni carattere viene scelto casualmente in modo indipendente

## Esempi

### Esempio 1: Generare ID con lunghezza predefinita

```javascript
const id = generaId();
console.log(id); // Esempio: 'aB3x9YpQ' (8 caratteri)
```

### Esempio 2: Generare ID corto

```javascript
const id = generaId(4);
console.log(id); // Esempio: 'xY7z' (4 caratteri)
```

### Esempio 3: Generare ID lungo

```javascript
const id = generaId(16);
console.log(id); // Esempio: 'aB3x9YpQkL2mN4oP' (16 caratteri)
```

### Esempio 4: Generare più ID

```javascript
const ids = [];
for (let i = 0; i < 5; i++) {
    ids.push(generaId(6));
}
console.log(ids);
// Esempio: ['a1B2c3', '4d5E6f', '7G8h9I', 'j0K1l2', 'M3n4O5']
```

### Esempio 5: Assegnare ID a elementi DOM

```javascript
const elements = document.querySelectorAll('.needs-id');
elements.forEach(el => {
    el.id = generaId(10);
});
```

## Dettagli Aggiuntivi

- **Caratteri usati**: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
- **Implementazione**:
  ```javascript
  const caratteri = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  for (let i = 0; i < lunghezza; i++) {
      id += caratteri.charAt(Math.floor(Math.random() * caratteri.length));
  }
  ```
- **Math.random()**: Genera un numero tra 0 (inclusivo) e 1 (esclusivo)
- **Probabilità**: Ogni carattere ha 1/62 probabilità di essere scelto
- **Univocità**: La probabilità di collisione diminuisce con l'aumentare della lunghezza
- **Efficienza**: O(n) - tempo lineare rispetto alla lunghezza
- **Esempi**:
  - generaId() → 'aB3x9YpQ'
  - generaId(4) → 'xY7z'
  - generaId(16) → 'aB3x9YpQkL2mN4oP'
- **Note**: Per univocità garantita, considerare UUID o altri metodi
