https://github.com/darknetzz/php-rand
php-rand
https://github.com/darknetzz/php-rand
generator number password password-generator php prime-numbers qrcode-generator random string
Last synced: 3 days ago
JSON representation
php-rand
- Host: GitHub
- URL: https://github.com/darknetzz/php-rand
- Owner: Darknetzz
- License: mit
- Created: 2018-08-16T10:45:30.000Z (almost 8 years ago)
- Default Branch: dev
- Last Pushed: 2026-07-02T09:10:34.000Z (6 days ago)
- Last Synced: 2026-07-02T11:05:33.614Z (6 days ago)
- Topics: generator, number, password, password-generator, php, prime-numbers, qrcode-generator, random, string
- Language: PHP
- Homepage: https://rand.demo.roste.org/
- Size: 16.9 MB
- Stars: 10
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# phprand
A comprehensive collection of useful developer tools built with PHP and modern web technologies.
**Demo:** [https://rand.demo.roste.org/](https://rand.demo.roste.org/)
> [!WARNING]
> Disclaimer: Please do not host this tool on a publicly accessible server. It most likely contains security vulnerabilities.

## Features
### Generators
- Number generator
- String generator
- Image generator (built into this repository)
- QR Code generator
- ID generator
- Spin the wheel
### Cryptography
- OpenSSL (AES encryption/decryption)
- Hashing (SHA512, SHA256, SHA1, MD5, and more)
- ROT cipher
- JWT inspector
- Private/public key tools
- SSH key generator
- CSR generator
- PEM/OpenSSH converter
- Crypto diagnostics
### Encoding & Decoding
- Base converters
- Binary/hexadecimal
- URL encoding/decoding
- HTML entities encode/decode
### Text & Data
- String tools (trim, reverse, shuffle, case conversion, etc.)
- Serialization (JSON, YAML, XML)
- Markdown editor (client-side live preview)
- Minify (CSS and JavaScript)
- Metaphone (phonetic key generation)
- Brainfuck converter
- Unit converter (volume, length, weight, temperature, energy, area, speed, time, power, data, pressure, angle)
- Currency converter
### Networking
- DNS lookup (hostname/IP resolution)
- CIDR to IP range
- IP range to CIDR conversion
- Subnet mask calculator
- IP to hexadecimal converter
### Comparison & Analysis
- Levenshtein distance (with tunable costs)
- Diff viewer (pure PHP, colorized output)
- Regex tester
### Miscellaneous
- Calculator (basic arithmetic)
- Datetime tools (time unit conversion, timezone selector)
- Browser client inspector (capabilities, optional permissions/WebRTC/public IP probes)
- Crontab helper
- ShellCheck (shell script linting)
## Installation
### Docker (Recommended)
The published image and `Dockerfile` use **PHP 8.5** with **GMP**, **OpenSSH client** (`ssh-keygen`), and the extensions listed in the Dockerfile.
#### Pull from Docker Hub
```bash
# Pull latest stable image (release tags)
docker pull darknetz/php-rand:latest
# Pull rolling dev image (updated on every push to dev)
docker pull darknetz/php-rand:dev
# alias: darknetz/php-rand:develop
# Run container (replace 12345 with your desired port)
docker run -d -p 12345:80 --name php-rand darknetz/php-rand:latest
```
#### Docker Compose
```yaml
services:
phprand:
image: darknetz/php-rand:latest
container_name: php-rand
ports:
- "12345:80" # replace 12345 with your desired port
restart: unless-stopped
```
#### Build from Dockerfile
```bash
# Clone repo
git clone https://github.com/Darknetzz/php-rand.git && cd php-rand
# Build image
docker build --no-cache -t php-rand .
# Run container (replace 12345 with your desired port)
docker run -d -p 12345:80 --name php-rand php-rand
```
### Manual Installation (Without Docker)
Requirements:
- PHP 8.3+ with extensions: mbstring, mcrypt, gd, yaml, xml, gmp
- Web server (Apache, Nginx, etc.) with PHP support
- Composer (for dependency management)
```bash
# Install system dependencies (Ubuntu/Debian)
sudo apt install -y php8.3-common php8.3-mbstring php8.3-mcrypt php8.3-gd php8.3-yaml php8.3-xml php8.3-gmp
# Clone repository (assuming webroot is /var/www/html)
cd /var/www/html
git clone https://github.com/Darknetzz/php-rand.git
cd php-rand
# Install Composer dependencies
composer install
```
Open your browser and visit `http:///php-rand`
## Production Performance Guidance
For production deployments, enable HTTP compression and strong cache headers for static assets.
### Nginx (gzip + brotli + cache headers)
```nginx
# Compression
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml;
# If ngx_brotli is installed:
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json application/xml image/svg+xml;
# Static assets: long cache
location ~* \.(?:css|js|png|jpg|jpeg|gif|svg|webp|ico|woff2?)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
# HTML/PHP responses: short/no cache
location ~* \.(?:html|php)$ {
add_header Cache-Control "no-cache, must-revalidate";
}
```
### Apache (.htaccess or vhost)
```apache
AddOutputFilterByType DEFLATE text/plain text/html text/css application/javascript application/json application/xml image/svg+xml
AddOutputFilterByType BROTLI_COMPRESS text/plain text/html text/css application/javascript application/json application/xml image/svg+xml
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/svg+xml "access plus 30 days"
Header set Cache-Control "public, max-age=2592000, immutable"
Header set Cache-Control "no-cache, must-revalidate"
```
Notes:
- Use content-hashed filenames (`app.abc123.js`) for truly immutable caching.
- Keep HTML dynamic/short-lived so new releases are discovered quickly.
## Documentation
For detailed documentation, feature guides, and implementation details, see:
- [CHANGELOG](CHANGELOG.md) - Version history and feature updates
- [README](docs/README.md) - Detailed feature documentation
- [IMPLEMENTATION_SUMMARY](docs/IMPLEMENTATION_SUMMARY.md) - Technical implementation details
- [VISUAL_GUIDE](docs/VISUAL_GUIDE.md) - UI/UX design documentation
- [RANDOM_BUTTON_FEATURE](docs/RANDOM_BUTTON_FEATURE.md) - Random data generation feature guide
## Release Workflow
Use the interactive release helper:
```bash
./scripts/release.sh 1.2.10
```
What it does:
- rotates `CHANGELOG.md` from `## [Unreleased]` into `## [vX.Y.Z] (YYYY-MM-DD)`
- recreates a fresh `Unreleased` template
- sets `VERSION=vX.Y.Z` in `docker-image.config` so local Docker builds match the release
- creates a release commit and annotated tag (`vX.Y.Z`; commit includes `CHANGELOG.md` and `docker-image.config`)
- optionally pushes branch + tag after an explicit confirmation prompt
- **GitHub Release + Docker Hub / GHCR images:** pushing the tag runs `.github/workflows/release.yml` and `docker-release.yml`. You normally do **not** need `gh` or `docker-pushimage.sh` unless Actions are off or you want an immediate local registry push.
- after a successful push, prompts (from `/dev/tty`, not stdin) to run `gh release create` and `./docker-pushimage.sh` — default is **Y** (Enter accepts) so a normal push is not cut short after `git`
- then prompts to **merge `dev` into `main` and push** (default **Y**) so the default branch matches the release line; override branch names with `RELEASE_BRANCH` / `MAIN_BRANCH` if needed
- if you already pushed the tag but skipped those steps: `./scripts/release.sh 1.2.10 --publish-only` (includes the same `gh`, Docker, and merge prompts when run from `dev`)
**Why GitHub might still show an older “Latest” release:** the badge uses **GitHub Releases**, not tags only. You need either a successful `release.yml` run on tag push or `gh release create`. If that step failed earlier, create the release with `--publish-only` or from the Releases UI.
Environment toggles:
- `CREATE_GH_RELEASE=1` — after push, run `gh release create` with changelog notes (skipped if the release already exists, e.g. CI created it first)
- `PUBLISH_DOCKER=1` — after push, run `./docker-pushimage.sh` (uses updated `docker-image.config`; still uses your Docker Hub / `.env` credentials)
- `MERGE_RELEASE_TO_MAIN=1` — after the above, merge `dev` into `main` and push (non-interactive; combine with other toggles as needed)
Common options:
- `./scripts/release.sh --help` to show usage
- `./scripts/release.sh 1.2.10 --dry-run` to preview actions only
- `./scripts/release.sh 1.2.10 --publish-only` to run only `gh` + Docker after the tag is on the remote
Other release helpers (run from repo root):
- **`scripts/extract_changelog_section.sh`** — Prints one `CHANGELOG.md` section by heading title (from `## ` through the next `## [` line). Example: `./scripts/extract_changelog_section.sh CHANGELOG.md "[v1.2.10]"`. Use `--dry-run` to verify the heading exists without printing the body. Requires [ripgrep](https://github.com/BurntSushi/ripgrep) (`rg`) for `--dry-run`.
- **`scripts/update-release-descriptions.php`** — For each `## [vX.Y.Z]` block in `CHANGELOG.md`, runs `gh release edit --notes-file …` so existing GitHub Releases match the changelog (useful after editing old sections). Requires the [GitHub CLI](https://cli.github.com/) authenticated for this repo. Use `php scripts/update-release-descriptions.php --dry-run` to list what would be updated without calling the API.
CI Docker publish requirements:
- Docker Hub secrets: `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN`
- GHCR publish uses `GITHUB_TOKEN` automatically
- **Release images** (`latest`, `vX.Y.Z`): pushed on `v*` tags via `docker-release.yml`
- **Dev images** (`dev`, `develop`): republished on every push to `dev` via `docker-dev.yml` (rolling tags only)
## Key Features
### Number Generator Notes
- Digit mode supports up to 50 digits.
- For values above the native PHP integer range on the current server, generation uses **GMP** (including `gmp_prob_prime` for primality). Supported large-digit types include `any`, `odd`, `even`, `palindromic`, `prime`, and `composite`.
- `square` and `fibonacci` still require native integer ranges and are not available for digit ranges above that limit.
### 🎲 Smart Random Data Generation
Automatic random data buttons for all input fields with context-aware detection:
- Calculator inputs get math expressions
- Networking fields get IP addresses or CIDR notation
- Email fields get email addresses
- And 20+ other context-specific generators
### 🌍 UTF-8 Support
Full UTF-8 character encoding support across all modules for international text handling.
### 📚 Comprehensive Documentation
All functions include PHPDoc comments with descriptions, parameters, return types, and usage examples.
### 🎨 Modern UI/UX
- Dark theme with gradient accents
- Responsive Bootstrap-based layout
- Split input/output designs
- Smooth animations and visual feedback
- Copy-to-clipboard functionality
## Architecture
- **Backend:** PHP 8.3+ with modular design (Docker image: PHP 8.5)
- **Frontend:** Vanilla JavaScript, jQuery, Bootstrap 5, Tabler UI
- **Dependencies:** Composer-managed (minify utilities)
- **Extensible:** Easy to add new tools by creating new modules
## License
See LICENSE file in the repository.
## Support
For bugs, feature requests, or questions, please visit the [GitHub repository](https://github.com/Darknetzz/php-rand).