Finding if a custom field is editable using Apex code
Map<String, Schema.SObjectField> map = Schema.SObjectType.Custom1__c.fields.getMap();
for(String fieldName : map.keySet()) {
if(map.get(fieldName).getDescribe().isUpdateable()) {
custom1.put(fieldName , 'some value');
}
}
Available through the Describe API. You are looking for Schema.DescribeFieldResult.isUpdateable().
Being editable and updateable is not the same thing for any sobject field.
For example:ActivatedDate, ActivatedById, LastReferencedDate, LastViewedDate, StatusCode, EmailBouncedReason etc.
These are all standard fields and all of them are updateable but not editable.
Since you can't reproduce this situation for custom fields and those fields all have spesific api names for all object, i suggest you to create an IsUpdateable map from fieldname to isupdateable result and set them as false for those special fields, if you will use them on a visualforce page on the rendered attribute or just control them with a clause on the getter method.