referral-code-generator
Version:
A package that helps use generate referral code for your users
292 lines (232 loc) • 9.4 kB
JavaScript
/**
* Referral Code Generator
* @params {username, wordlength, numlength, type}
* Author: Temitope Ayotunde [@codegrenade]
* Lincense: MIT
*/
class ReferralCodeGenerator {
/*
* Remove Commas
*/
static removeCommas(word){
return word.replace(/,/g, '');
}
/*
* Generate alpha-numeric referral code
*/
static alphaNumeric(type, wordlength, numlength) {
// english alphabets
let alphabets = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
// english numbers
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
// check if wordcase is supplied
if(type == null || type == ''){
return 'wordcase type is required.';
}else{
// check for word case type
if(type == 'uppercase'){
// check for wordlength
if(wordlength.length < 1){
return 'length of alphabets to be generated is required.';
}else{
// check params type
if(typeof(wordlength) !== 'number'){
return 'wordlength must be a number.';
}else{
// check for numlength
if(numlength.length > 1){
return 'number of random digits to be generated is required.';
}else{
// check params type
if(typeof(numlength) !== 'number'){
return 'number of random digits must be a number';
}else{
// alphabets and numbers collection array
let picks = [];
// loop through alphabets array and pick an alphabet with the generated index
for (let i = 0; i < wordlength; i++) {
let key = Math.floor(Math.random()*alphabets.length);
picks.push(alphabets[key].toUpperCase());
// loop through numbers array and pick a number with the generated index
for(let k = 0; k < numlength; k++) {
let pin = Math.floor(Math.random()*numbers.length);
picks.push(numbers[pin]);
}
}
// convert selected alphabets array to string and remove seperating commas
let letters = picks.toString();
let data = this.removeCommas(letters);
// return letters in wordcase format and numbers
return data;
}
}
}
}
}else{
// check for wordlength
if(wordlength.length < 1){
return 'length of alphabets to be generated is required.';
}else{
// check params type
if(typeof(wordlength) !== 'number'){
return 'wordlength must be a number.';
}else{
// check for numlength
if(numlength.length > 1){
return 'number of random digits to be generated is required.';
}else{
// check params type
if(typeof(numlength) !== 'number'){
return 'number of random digits must be a number';
}else{
// alphabets and numbers collection array
let picks = [];
// loop through alphabets array and pick an alphabet with the generated index
for (let i = 0; i < wordlength; i++) {
let key = Math.floor(Math.random()*alphabets.length);
picks.push(alphabets[key].toLowerCase());
// loop through numbers array and pick a number with the generated index
for(let k = 0; k < numlength; k++) {
let pin = Math.floor(Math.random()*numbers.length);
picks.push(numbers[pin]);
}
}
// convert selected alphabets array to string and remove seperating commas
let letters = picks.toString();
let data = this.removeCommas(letters);
// return letters in wordcase format and numbers
return data;
}
}
}
}
}
}
}
/*
* Generates alpha referral code
* @params { type, wordlength }
*/
static alpha(type, wordlength) {
// english alphabets
let alphabets = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
// check if wordcase is supplied
if(type == null || type == ''){
return 'wordcase type is required.';
}else{
// check for word case type
if(type == 'uppercase'){
// check for wordlength
if(wordlength.length < 1){
return 'length of alphabets to be generated is required.';
}else{
// check params type
if(typeof(wordlength) !== 'number'){
return 'wordlength must be a number.';
}else{
// alphabets collection array
let picks = [];
// loop through array and pick an alphabet with the generated index
for (let i = 0; i < wordlength; i++) {
let key = Math.floor(Math.random()*alphabets.length);
picks.push(alphabets[key]);
}
// convert selected alphabets array to string and remove seperating commas
let letters = picks.toString();
let data = this.removeCommas(letters);
// return letters in wordcase format
return data.toUpperCase();
}
}
}else{
// check for wordlength
if(wordlength.length < 1){
return 'length of alphabets to be generated is required.';
}else{
// check params type
if(typeof(wordlength) !== 'number'){
return 'wordlength must be a number.';
}else{
// alphabets collection array
let picks = [];
// loop through array and pick an alphabet with the generated index
for (let i = 0; i < wordlength; i++) {
let key = Math.floor(Math.random()*alphabets.length);
picks.push(alphabets[key]);
}
// convert selected alphabets array to string and remove seperating commas
let letters = picks.toString();
let data = this.removeCommas(letters);
// return letters in wordcase format
return data.toLowerCase();
}
}
}
}
}
/*
* Generate custom referral code
* @params { username, wordlength, numlength, type }
*/
static custom(type, wordlength, numlength, username) {
// check for the username length
if(username.length > 1){
// check for word length
if(typeof(wordlength) !== 'number'){
return 'word length to chunk must be a number';
}else{
// check if username length is greater than word length
if(username.length > wordlength){
// extract code word
let chunked_name = username.slice(0, wordlength);
// check for wordcase
if(type != null){
// check wordcase type
if(type == 'uppercase'){
// check for random number length
if(numlength > 1){
// generate random number
// Math.floor(100000 + Math.random() * 900000)
let code = Math.floor(Math.pow(10, numlength-1) + Math.random() * 9 * Math.pow(10, numlength-1));
// referral code
return chunked_name.toUpperCase()+''+code;
}else{
return 'random number length is required.';
}
}else if(type == 'lowercase'){
// check for random number length
if(numlength > 1){
// generate random number
let code = Math.floor(Math.pow(10, numlength-1) + Math.random() * 9 * Math.pow(10, numlength-1));
// referral code
return chunked_name.toLowerCase()+''+code;
}else{
return 'random number length is required.';
}
}else{
// check for random number length
if(numlength > 1){
// generate random number
let code = Math.floor(Math.pow(10, numlength-1) + Math.random() * 9 * Math.pow(10, numlength-1));
// referral code
return chunked_name+''+code;
}else{
return 'random number length is required.';
}
}
}else{
// generate random number
let code = Math.floor(100000 + Math.random() * 900000)
// referral code
return chunked_name+''+code;
}
}else{
return 'username\'s length should be greater than word length.';
}
}
}else{
return 'username is required.';
}
}
}
module.exports = ReferralCodeGenerator;