//choose your object name (without suffix!)
String objectName = 'Work';
String query = 'SELECT Id From CustomObject Where DeveloperName = \'' + objectName + '\'';
String endpoint = Url.getSalesforceBaseUrl().toExternalForm();
endpoint += '/services/data/v29.0/tooling/query/?q=';
endpoint += EncodingUtil.urlEncode(query, 'UTF-8');
HttpRequest request = new HttpRequest();
request.setMethod('GET');
request.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
request.setEndpoint(endpoint);
HttpResponse response = new Http().send(request);
Id customObjectId = response.getBody().substringAfter('"Id":"').substringBefore('"');
//eg '01Id0000001BSeoEAG'
System.debug(customObjectId);
Which will give you something like:
'01Id0000001BSeoEAG'
parsed from the raw response:
{
"size": 1,
"totalSize": 1,
"done": true,
"records":[{
"attributes": {
"type": "CustomObject",
"url": "/services/data/v29.0/tooling/sobjects/CustomObject/01Id0000001BSeoEAG"
},
"Id": "01Id0000001BSeoEAG"
}],
"queryLocator":null,
"entityTypeName":"CustomEntityDefinition"
}