Created
November 6, 2015 19:00
-
-
Save knation/f47a22fa96a630a0bb70 to your computer and use it in GitHub Desktop.
JavaScript Salesforce ID Check & Expansion
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* The regex for a SF ID. | |
* @type {RegExp} | |
* @const | |
*/ | |
var ID_REGEX = /^[0-9a-zA-Z]{15}([0-9a-zA-Z]{3})?$/; | |
/** | |
* Array used to expand a SF ID from 15 to 18 characters. | |
* @type {Array.<String>} | |
* @const | |
*/ | |
var ID_EXPAND_ARRAY = ['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','0','1','2','3','4','5']; | |
/** | |
* Constructor for SalesforceId object. | |
* @param {String} id | |
* @this {SalesforceId} | |
*/ | |
function SalesforceId(id) { | |
this.id = id; | |
} | |
/** | |
* Checks the ID to make sure its format is valid for Salesforce. | |
* @this {SalesforceId} | |
* @return {Boolean} | |
*/ | |
SalesforceId.prototype.isValid = function() { | |
return ID_REGEX.test(this.id); | |
}; | |
/** | |
* Creates an 18-character ID if not already. If invalid, returns null. | |
* @this {SalesforceId} | |
* @return {?String} | |
*/ | |
SalesforceId.prototype.expand = function() { | |
if (!this.isValid(this.id)) { | |
// Return null if invalid | |
return null; | |
} else if (this.id.length === 18) { | |
// Return as-is if already 18 chars | |
return this.id; | |
} else { | |
var chunks = [this.id.substr(0, 5), this.id.substr(5, 5), this.id.substr(10, 5)] | |
, chunkBits = ['','','']; | |
for (var i=0;i<chunks[0].length;i++) chunkBits[0] = (/[A-Z]/.test(chunks[0].substr(i, 1)) ? '1' : '0') + chunkBits[0]; | |
for (var i=0;i<chunks[1].length;i++) chunkBits[1] = (/[A-Z]/.test(chunks[1].substr(i, 1)) ? '1' : '0') + chunkBits[1]; | |
for (var i=0;i<chunks[2].length;i++) chunkBits[2] = (/[A-Z]/.test(chunks[2].substr(i, 1)) ? '1' : '0') + chunkBits[2]; | |
chunkBits[0] = parseInt(chunkBits[0], 2); | |
chunkBits[1] = parseInt(chunkBits[1], 2); | |
chunkBits[2] = parseInt(chunkBits[2], 2); | |
return this.id + ID_EXPAND_ARRAY[chunkBits[0]] + ID_EXPAND_ARRAY[chunkBits[1]] + ID_EXPAND_ARRAY[chunkBits[2]]; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment